【快速入门Linux】10_Linux命令—Vi编辑器

news2024/11/21 0:17:23

文章目录

  • 一、`vi` 简介
    • 1.1 vi
    • 1.2 vim
    • 1.3查询软连接命令(知道)
  • 二、打开和新建文件(重点)
    • 2.1 打开文件并且定位行
    • 2.2 异常处理
  • 三、vi三种工作模式(重点)
    • 3.1 末行模式-命令
  • 四、常用命令
    • 4.0 命令线路图
    • 4.1 移动(基本)
      • 4.1.1 上、下、左、右
      • 4.1.2 行内移动
      • 4.1.3 行数移动
      • 4.1.4 屏幕移动
    • 4.2 移动(程序)
      • 4.2.1 段落移动
      • 4.2.2 括号切换
      • 4.2.3 标记
    • 4.3 选中文本(可视模式)
    • 4.4 撤销和恢复撤销
    • 4.5 删除文本
    • 4.6 复制、粘贴
    • 4.7 替换
    • 4.8 缩排和重复执行
    • 4.9 查找
      • 4.9.1 常规查找
      • 4.9.2 单词快速匹配
    • 4.10 查找并替换
      • 4.10.1 全局替换
      • 4.10.2 可视区域替换
      • 4.10.3 确认替换
    • 4.11 插入命令(重要)
  • 五、分屏命令(重要)
    • 5.1 末行命令扩展
    • 5.2 分屏命令(重要)
      • 5.2.1 切换分屏窗口
      • 5.2.2 调整窗口大小
  • 六、vimrc

一、vi 简介

  • 在工作中,要对 服务器 上的文件进行 简单 的修改,可以使用 ssh 远程登录到服务器上,并且使用 vi 进行快速的编辑即可
  • 常见需要修改的文件包括:
    • 源程序
    • 配置文件,例如 ssh 的配置文件 ~/.ssh/config
  • 在没有图形界面的环境下,要编辑文件,vi 是最佳选择!

1.1 vi

在很多 Linux 发行版中,直接把 vi 做成 vim 的软连接 (软连接:软件的快捷方式,打开vi实际就是vim)

  • viVisual interface 的简称,是 Linux最经典 的文本编辑器

  • vi 的核心设计思想 —— 让程序员的手指始终保持在键盘的核心区域,就能完成所有的编辑操作

  • vi 的特点:

    • 没有图形界面功能强大 的编辑器
    • 只能是编辑 文本内容,不能对字体、段落进行排版
    • 不支持鼠标操作
    • 没有菜单
    • 只有命令
  • vi 编辑器在 系统管理服务器管理 编辑文件时,其功能永远不是图形界面的编辑器能比拟的

1.2 vim

vim = vi improved

  • vim 是从 vi 发展出来的一个文本编辑器,支持 代码补全编译错误跳转 等方便编程的功能特别丰富,在程序员中被广泛使用,被称为 编辑器之神

1.3查询软连接命令(知道)

  • 在很多 Linux 发行版中直接把 vi 做成 vim 的软连接
# 查找 vi 的运行文件

$ which vi
$ ls -l /usr/bin/vi
$ ls -l /etc/alternatives/vi
$ ls -l /usr/bin/vim.basic

# 查找 vim 的运行文件
$ which vim
$ ls -l /usr/bin/vim
$ ls -l /etc/alternatives/vim
$ ls -l /usr/bin/vim.basic 

二、打开和新建文件(重点)

  • 在终端中输入 vi 在后面跟上文件名 即可;
$ vi 文件名                    
  • 如果文件已经存在,会直接打开该文件
  • 如果文件不存在,会新建一个文件
==注意:必须在文件所在的目录中打开==
python@ubuntu:~$ cd Desktop/       # 先返回文件所在的路径,之后再用vi 打开文件
python@ubuntu:~/Desktop$ vi 1.py 

2.1 打开文件并且定位行

  • 在日常工作中,有可能会遇到 打开一个文件,并定位到指定行 的情况

  • 例如:在开发时,知道某一行代码有错误,可以 快速定位 到出错代码的位置

  • 这个时候,可以使用以下命令打开文件

$ vi 文件名 +行数

python@ubuntu:~/Desktop$ vi 1.py +3   # 定位到1.py文件中的第3行
python@ubuntu:~/Desktop$ vi 1.py +    # 定位到1.py文件中的末尾

提示:如果只带上 + 而不指定行号,会直接定位到文件末尾

2.2 异常处理

  • 如果 vi 异常退出,在磁盘上可能会保存有 交换文件
  • 下次再使用 vi 编辑该文件时,会看到以下屏幕信息,按下字母 d 可以 删除交换文件 即可

提示:按下键盘时,注意关闭输入法

python@ubuntu:~$ cd Desktop/
python@ubuntu:~/Desktop$ ls -la
总用量 1296
drwxr-xr-x  2 python python    4096 427 22:49 .
drwxr-xr-x 35 python python    4096 427 22:49 ..
-rw-rw-r--  1 python python     434 731  2022 1.py
-rw-r--r--  1 python python   12288 427 22:49 .1.py.swp   #以点(.)开头的文件是隐藏文件
-rw-rw-r--  1 python python 1298604 731  2022 jd.sql
python@ubuntu:~/Desktop$ vi 1.py 

在这里插入图片描述

三、vi三种工作模式(重点)

  • vi 有三种基本工作模式:

    1. 命令模式
      • 打开文件首先进入命令模式,是使用 vi入口
      • 通过 命令 对文件进行常规的编辑操作,例如:定位翻页复制粘贴删除……
      • 在其他图形编辑器下,通过 快捷键 或者 鼠标 实现的操作,都在 命令模式 下实现
    2. 末行模式 —— 执行 保存退出 等操作
      • 要退出 vi 返回到控制台,需要在末行模式下输入命令
      • 末行模式vi出口
    3. 编辑模式 —— 正常的编辑文字
      在这里插入图片描述

提示:在 Touch Bar 的 Mac 电脑上 ,按 ESC 不方便,可以使用 CTRL + [ 替代

3.1 末行模式-命令

命令英文功能
wwrite保存
qquit退出,如果没有保存,不允许退出
q!quit强行退出,不保存退出
wqwrite & quit保存并退出
x保存并退出

四、常用命令

4.0 命令线路图

  1. 重复次数
    • 在命令模式下,先输入一个数字再跟上一个命令,可以让该命令 重复执行指定次数
  2. 移动和选择(多练
    • vi 之所以快,关键在于 能够快速定位到要编辑的代码行
    • 移动命令 能够 和 编辑操作 命令 组合使用
  3. 编辑操作
    • 删除复制粘贴替换缩排
  4. 撤销和重复
  5. 查找替换
  6. 编辑

4.1 移动(基本)

  • 要熟练使用 vi,首先应该学会怎么在 命令模式 下样快速移动光标
  • 编辑操作命令,能够和 移动命令 结合在一起使用

4.1.1 上、下、左、右

命令功能手指
h向左食指
j向下食指
k向上中指
l向右无名指

4.1.2 行内移动

命令英文功能
wword向后移动一个单词
bback向前移动一个单词
0数字零行首
^行首,第一个不是空白字符的位置
$行尾

4.1.3 行数移动

命令英文功能
gggo文件顶部
Ggo文件末尾
数字gggo移动到 数字 对应行数
数字Ggo移动到 数字 对应行数
:数字移动到 数字 对应行数

4.1.4 屏幕移动

命令英文功能
Ctrl + bback向上翻页
Ctrl + fforward向下翻页
HHead屏幕顶部
MMiddle屏幕中间
LLow屏幕底部

4.2 移动(程序)

4.2.1 段落移动

  • vi 中使用 空行 来区分段落
  • 在程序开发时,通常 一段功能相关的代码会写在一起 —— 彼此之间没有空行
命令功能
{上一段
}下一段

4.2.2 括号切换

  • 在程序世界中,()[]{} 使用频率很高,而且 都是成对出现的
命令功能
%括号匹配及切换

4.2.3 标记

  • 在开发时,某一块代码可能需要稍后处理,例如:编辑、查看
  • 此时先使用 m 增加一个标记,这样可以 在需要时快速地跳转回来 或者 执行其他编辑操作
  • 标记名称 可以是 a~z 或者 A~Z 之间的任意 一个 字母
  • 添加了标记的 行如果被删除标记同时被删除
  • 如果 在其他行添加了相同名称的标记之前添加的标记也会被替换掉
命令英文功能
mxmark添加标记 x,x 是 a~z 或者 A~Z 之间的任意一个字母
'x直接定位到标记 x 所在位置

4.3 选中文本(可视模式)

  • 学习 复制 命令前,应该先学会 怎么样选中 要复制的代码
  • vi 中要选择文本,需要先使用 Visual 命令切换到 可视模式
  • vi 中提供了 三种 可视模式,可以方便程序员选择 选中文本的方式
  • ESC 可以放弃选中,返回到 命令模式
命令模式功能
v (小写)可视模式从光标位置开始按照正常模式选择文本
V (大写)可视行模式选中光标经过的完整行
Ctrl + v可视块模式垂直方向选中文本
  • 可视模式下,可以和 移动命令 连用,例如:ggVG 能够选中所有内容

4.4 撤销和恢复撤销

  • 在学习编辑命令之前,先要知道怎样撤销之前一次 错误的 编辑动作!
命令英文功能
uundo撤销上次命令
Ctrl + rredo恢复撤销的命令

4.5 删除文本

命令英文功能
xcut删除光标所在字符,或者选中文字
d(移动命令)delete删除移动命令对应的内容
dddelete删除光标所在行,可以 ndd 复制多行
Ddelete删除至行尾

提示:如果使用 可视模式 已经选中了一段文本,那么无论使用 d 还是 x,都可以删除选中文本

  • 删除命令可以和 移动命令 连用,以下是常见的组合命令:
* dw        # 从光标位置删除到单词末尾
* d0        # 从光标位置删除到一行的起始位置
* d}        # 从光标位置删除到段落结尾
* ndd       # 从光标位置向下连续删除 n 行
* d代码行G   # 从光标所在行 删除到 指定代码行 之间的所有代码
* d'a       # 从光标所在行 删除到 标记a 之间的所有代码

4.6 复制、粘贴

  • vi 中提供有一个 被复制文本的缓冲区
    • 复制 命令会将选中的文字保存在缓冲区
    • 删除 命令删除的文字会被保存在缓冲区
    • 在需要的位置,使用 粘贴 命令可以将缓冲区的文字插入到光标所在位置
命令英文功能
y(移动命令)copy复制
yycopy复制一行,可以 nyy 复制多行
ppaste粘贴

提示

  • 命令 dx 类似于图形界面的 剪切操作 —— CTRL + X
  • 命令 y 类似于图形界面的 复制操作 —— CTRL + C
  • 命令 p 类似于图形界面的 粘贴操作 —— CTRL + V
  • vi 中的 文本缓冲区同样只有一个,如果后续做过 复制、剪切 操作,之前缓冲区中的内容会被替换

注意

  • vi 中的 文本缓冲区 和系统的 剪贴板 不是同一个
  • 所以在其他软件中使用 CTRL + C 复制的内容,不能在 vi 中通过 P 命令粘贴
  • 可以在 编辑模式 下使用 鼠标右键粘贴

4.7 替换

命令英文功能工作模式
rreplace替换当前字符命令模式
Rreplace替换当前行光标后的字符替换模式
  • R 命令可以进入 替换模式,替换完成后,按下 ESC 可以回到 命令模式
  • 替换命令 的作用就是不用进入 编辑模式,对文件进行 轻量级的修改

4.8 缩排和重复执行

命令功能
>>向右增加缩进
<<向左减少缩进
.重复上次命令
  • 缩排命令 在开发程序时,统一增加代码的缩进 比较有用!
    • 一次性 在选中代码前增加 4 个空格,就叫做 增加缩进
    • 一次性 在选中代码前删除 4 个空格,就叫做 减少缩进
  • 可视模式 下,缩排命令只需要使用 一个 > 或者 <

在程序中,缩进 通常用来表示代码的归属关系

  • 前面空格越少,代码的级别越高
  • 前面空格越多,代码的级别越低

4.9 查找

4.9.1 常规查找

命令功能
/str查找 str
/python      # 查找文件中含有Python的字符串
  • 查找到指定内容之后,使用 Next 查找下一个出现的位置:
    • n: 查找下一个
    • N: 查找上一个
  • 如果不想看到高亮显示,可以随便查找一个文件中不存在的内容即可

4.9.2 单词快速匹配

命令功能
*向下查找当前光标所在单词
#向上查找当前光标所在单词
  • 在开发中,通过单词快速匹配,可以快速看到这个单词在其他什么位置使用过

4.10 查找并替换

  • vi 中查找和替换命令需要在 末行模式 下执行
  • 记忆命令格式:
:%s///g                     # 之后回车确认

4.10.1 全局替换

  • 一次性替换文件中的 所有出现的旧文本
  • 命令格式如下:
:%s/旧文本/新文本/g            # 之后回车确认

4.10.2 可视区域替换

  • 先选中 要替换文字的 范围
  • 命令格式如下:
:s/旧文本/新文本/g               # 之后回车确认

4.10.3 确认替换

  • 如果把末尾的 g 改成 gc 在替换的时候,会有提示!推荐使用!
:%s/旧文本/新文本/gc               # 之后回车确认
  1. y - yes 替换
  2. n - no 不替换
  3. a - all 替换所有
  4. q - quit 退出替换
  5. l - last 最后一个,并把光标移动到行首
  6. ^E 向下滚屏
  7. ^Y 向上滚屏

4.11 插入命令(重要)

  • vi 中除了常用的 i 进入 编辑模式 外,还提供了以下命令同样可以进入编辑模式:
命令英文功能常用
iinsert在当前字符前插入文本常用
Iinsert在行首插入文本较常用
aappend在当前字符后添加文本
Aappend在行末添加文本较常用
o在当前行后面插入一空行常用
O在当前行前面插入一空行常用

在这里插入图片描述

五、分屏命令(重要)

  • 属于 vi 的高级命令 —— 可以 同时编辑和查看多个文件

5.1 末行命令扩展

末行命令 主要是针对文件进行操作的:保存退出保存&退出搜索&替换另存新建浏览文件

命令英文功能
:e .edit会打开内置的文件浏览器,浏览要当前目录下的文件
:n 文件名new新建文件
:w 文件名write另存为,但是仍然编辑当前文件,并不会切换文件

提示:切换文件之前,必须保证当前这个文件已经被保存!

  • 已经学习过的 末行命令
命令英文功能
:wwrite保存
:qquit退出,如果没有保存,不允许退出
:q!quit强行退出,不保存退出
:wqwrite & quit保存并退出
:x保存并退出
:%s///gc确认搜索并替换

在实际开发中,可以使用 w 命令 阶段性的备份代码

5.2 分屏命令(重要)

  • 使用 分屏命令,可以 同时编辑和查看多个文件
命令英文功能
:sp [文件名]split横向增加分屏
:vsp [文件名]vertical split纵向增加分屏

5.2.1 切换分屏窗口

分屏窗口都是基于 CTRL + W 这个快捷键的,w 对应的英文单词是 window

点击完:CTRL + W ,再点击下面的字母

命令英文功能
wwindow切换到下一个窗口
rreverse互换窗口
cclose关闭当前窗口,但是不能关闭最后一个窗口
qquit退出当前窗口,如果是最后一个窗口,则关闭 vi
oother关闭其他窗口

5.2.2 调整窗口大小

分屏窗口都是基于 CTRL + W 这个快捷键的,w 对应的英文单词是 window

点击完:CTRL + W ,再点击下面的字母

命令英文功能
+增加窗口高度
-减少窗口高度
>增加窗口宽度
<减少窗口宽度
=等分窗口大小

调整窗口宽高的命令可以和数字连用,例如:5 CTRL + W + 连续 5 次增加高度

六、vimrc

  • vimrcvim 的配置文件,可以设置 vim 的配置,包括:热键配色语法高亮插件
  • Linuxvimrc 有两个位置,家目录下的配置文件优先级更高
/etc/vim/vimrc
~/.vimrc
  • 常用的插件有:
    • 代码补全
    • 代码折叠
    • 搜索
    • Git 集成
    • ……
  • 网上有很多高手已经配置好的针对 python 开发的 vimrc 文件,可以下载过来直接使用,或者等大家多 Linux 比较熟悉后,再行学习!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1654863.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ROS 2边学边练(44)-- 从头开始构建一个视觉机器人模型

前言 从此篇开始我们就开始接触URDF(Unified Robot Description Format&#xff0c;统一机器人描述格式)&#xff0c;并利用其语法格式搭建我们自己的机器人模型。 动动手 开始之前我们需要确认是否安装joint_state_publisher功能包&#xff0c;如果有安装过二进制版本的urdf_…

C++ stack、queue以及deque

1、stack和queue常用接口 严格来说栈和队列的实现是容器适配器 1、常用接口&#xff1a; 栈&#xff1a;top、push、pop、size、emptystack - C Reference (cplusplus.com) 队列&#xff1a;top、push、pop、swap、size、emptyqueue - C Reference (cplusplus.com) 2、deque&a…

Pycharm安装包numpy和matplotlib安装

环境 python 3.12 Pycharm 2023.1 安装包 创建图表的 numpy 库和 matplotlib 库 安装过程出现的问题 setuptools工具包没有安装 Python packaging tool setuptools not found文件 -> 设置 -> 项目:xxx -> python解释器界面显示不出已安装的软件包&#xff0c;系…

MQTT服务搭建及python使用示例

1、MQTT协议 1.1、MQTT介绍 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的、基于发布/订阅模式的通信协议&#xff0c;通常用于物联网设备之间的通讯。它具有低带宽、低功耗和开放性等特点&#xff0c;适合在网络带宽有限或者网络连接不稳定…

pyinstaller 不是内部或外部命令,也不是可运行的程序或批处理文件的解决办法(详细)

首先我们需要查看是否安装了pyinstaller &#xff0c;可以在命令窗口输入命令pip list检查是否安装成功&#xff0c; 这里我们可以看见已经安装成功了的&#xff0c;如果没有安装可以执行安装命令 pip install pyinstaller 进行安装即可。 下一步我们排查pyinstaller的安装路…

Python数据可视化------地图

基础地图使用 # 地图基本演示 # 导包 from pyecharts.charts import Map from pyecharts.options import TitleOpts, VisualMapOpts# 准备地图对象 cmap Map() # 准备数据&#xff08;列表&#xff09; data [("北京市", 99), ("上海市", 199), ("…

为什么你创业总是失败?2024普通人如何创业?2024创业赛道!2024创业新风口!2024创业方向!2024普通人的机会!

为什么你做项目老是不赚钱&#xff0c;是你不够努力吗&#xff1f;是你运气不好吗&#xff1f; 如果都不是&#xff01;那一定是你的思维逻辑出了问题&#xff01; 先想一想你以前做的项目&#xff0c;有没有哪个符合以下条件&#xff1a;对客户有价值、寻找客源成本在可接受…

BFS专题——FloodFill算法:200.岛屿数量

文章目录 题目描述算法原理代码实现CJava 题目描述 题目链接&#xff1a;200.岛屿数量 PS:注意题目中每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。也就是说斜角是不算了&#xff0c; 例如示例二&#xff0c;是三个岛屿。 算法原理 这道题目是 DFS&#xff0…

商务分析方法与工具(二):Python的趣味快捷-序列结构解决电影推荐

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

【C语言】内存函数的概念,使用及模拟实现

Tiny Spark get dazzling some day. 目录 1. memcpy-- 函数原型-- 函数使用-- 函数的模拟实现 2.memmove-- 函数原型-- 函数使用-- 函数的模拟实现 3. memset-- 函数原型-- 函数使用-- 函数的模拟实现 4. memcmp-- 函数原型-- 函数使用-- 函数的模拟实现 1. memcpy 使用需包含…

3dmax-vray6渲染器参数设置

适用于3dmax2018-2023版本 一、【公用】 小图输出大小:1500*1125&#xff0c;勾选大气、效果&#xff1b; 大图输出大小:3000*2250&#xff0c;勾选大气、效果、置换&#xff1b; 二、【vray】 小图抗锯齿类型:渐进式&#xff1b;最小细分:1&#xff0c;最大细分:100&#…

C++新特性

1 智能指针 1.1 为什么需要智能指针 智能指针主要解决以下问题&#xff1a; 内存泄漏&#xff1a;内存手动释放&#xff0c;使用智能指针可以自动释放共享所有权指针的传播和释放&#xff0c;比如多线程使用同一个对象时析构问题&#xff0c;比如&#xff1a; C里面的四个智…

解决springboot项目的网站静态页面显示不全问题

在通过springboot搭建项目时&#xff0c;为了能够访问静态的前端页面&#xff0c;我们考虑到访问的优先级问题&#xff0c;通常选择将资源放在recourses/static的目录下&#xff0c;如下&#xff1a; 这时可能会出现类似于下面这种图片无法加载、没有按照指定位置显示的情况&am…

R语言:r画韦恩图

> setwd("") > library(openxlsx) > library(ggvenn) > data <- read.xlsx("韦恩图种2.xlsx") data$P <- ifelse(data$P 0, "F", "T") data$N <- ifelse(data$N 0, "F", "T")> data &l…

流星烛台如何交易?Anzo Capital昂首资本3步盈利收场

各位投资者通过之前的文章可以准确的辨认出什么是流星烛台了&#xff0c;但是各位投资者一旦遇到流星图案知道怎么交易吗?其实一点都不困难&#xff0c;只要掌握住流星图案的交易真棒&#xff0c;Anzo Capital昂首资本3步就可以盈利收场。 首先&#xff0c;投资者需要确定图…

技术速递|介绍 .NET MAUI 社区工具包 v8 :包含 TouchBehavior 支持!

作者&#xff1a;Gerald Versluis 排版&#xff1a;Alan Wang .NET MAUI 社区工具包团队很自豪地向您介绍 .NET MAUI 社区工具包的第 8 版&#xff01; 在这个最新的主要版本中&#xff0c;我们为您带来了备受期待的 TouchBehavior&#xff08;以前称为 TouchEffect&#xff0…

【C++】详解STL容器之一的 vector

目录 概述 迭代器 数据结构 优点和缺点 接口介绍 begin end rbegin rend resize reseve insert erase 其他一些接口 模拟实现 框架 获取迭代器 深浅拷贝 赋值重载 reseve resize 拷贝构造 构造 析构 insert erase 其他 概述 vector是STL的容器之一。…

二叉树遍历总结

7.二叉树 二叉树理论基础 二叉树的种类 在我们解题过程中二叉树有两种主要的形式&#xff1a;满二叉树和完全二叉树。 满二叉树 完全二叉树 二叉搜索树 平衡二叉搜索树 C中map、set、multimap&#xff0c;multiset的底层实现都是平衡二叉搜索树&#xff0c;所以map、set的增…

2024.5.8 2.二叉树的最大深度 (简单)

给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3 示例 2&#xff1a; 输入&#xff1a;root [1,null,2] 输…

GZIP文件格式解析和Inflate静态Huffman解压缩

GZIP是封装了Deflate压缩的格式文件&#xff1b;Deflate使用了无压缩、HuffmanLZ77进行压缩&#xff1b;解压是Inflate&#xff0c;Huffman包括静态Huffman压缩和动态Huffman压缩两种模式。 Java语言实现了GZIP格式解析、Inflate的静态Huffman解压缩、CRC32校验 算法。 gzip文…