【笔记】Vim的操作


1.0 Vim的工作模式

  • Vim的命令模式:

使用Vim编辑文件时,默认处于命令模式。

此模式下,可使用方向键(上、下、左、右键)或 k、j、h、i 移动光标的位置,还可以对文件内容进行复制、粘贴、替换、删除等操作。

  • Vim的输入模式:

在输入模式下,Vim可以对文件执行写操作。

命令模式状态下输入 i、I、a、A、o、O 等插入命令切换到输入模式,当编辑文件完成后按Esc键即可返回命令模式。

  • Vim的编辑模式:

编辑模式用于对文件中的指定内容执行保存、查找或替换等操作。

命令模式状态下按“:”键切换到编辑模式,指令执行后Vim会自动返回命令模式。如想直接返回命令模式,按Esc即可。


2.0 Vim打开文件

Vi打开文件的选项 说 明
vim filename 打开或新建一个文件,并将光标置于第一行的首部
vim -r filename 恢复上次vim打开时崩溃的文件
vim -R filename 把指定的文件以只读方式放入Vim编辑器中
vim + filename 打开文件,并将光标置于最后一行的首部
vi +n filename 打开文件,并将光标置于第n行的首部
vi +/pattern filename 打幵文件,并将光标置于第一个与pattern匹配的位置
vi -c command filename 在对文件进行编辑前,先执行指定的命令

刚打开文件时Vim处于命令模式,此时文件的下方会显示文件的一些信息,包括文件的总行数和字符数,以及当前光标所在的位置等。


3.0 Vim编辑文件

3.1 Vim插入文本-命令模式

快捷键 功能描述
i 在当前光标所在位置插入随后输入的文本,光标后的文本相应向右移动
I 在光标所在行的行首插入随后输入的文本,行首是该行的第一个非空白字符,
相当于光标移动到行首执行i命令
o 在光标所在行的下面插入新的一行。光标停在空行首,等待输入文本
O 在光标所在行的上面插入新的一行。光标停在空行的行首,等待输入文本
a 在当前光标所在位置之后插入随后输入的文本
A 在光标所在行的行尾插入随后输入的文本,相当于光标移动到行尾再执行a命令

3.2 Vim查找文本-编辑模式

快捷键 功能描述
/abc 从光标所在位置向前查找字符串abc
/^abc 查找以abc为行首的行
/abc$ 查找以abc为行尾的行
?abc 从光标所在为主向后查找字符串abc
n 向同一方向重复上次的查找指令
N 向相反方向重复上次的查找指定
  • 在查找过程中需要注意的是,要查找的字符串是严格区分大小写的。
  • 如果想忽略大小写,则输入命令":set ic";调整回来输入":set noic"。
  • 如果在字符串中出现特殊符号,则需要加上转义字符 "\"。常见的特殊符号有 \、*、?、$等。如果出现这些字符,例如,要查找字符串"10",则需要在命令模式中输入 "/10\\"。

3.3 Vim替换文本-编辑模式

快捷键 功能描述
r 替换光标所在位置的字符
R 从光标所在位置开始替换字符,其输入内容会覆盖掉后面等长的文本内容,按“Esc”可以结束
:s/a1/a2/g 将当前光标所在行中的所有a1用a2替换
:n1,n2s/a1/a2/g 将文件中n1到n2行中所有a1都用a2替换
:g/a1/a2/g 将文件中所有的a1都用a2替换

例如,要将某文件中所有的"root"替换为"liudehua",则有两种输入命令,分别为:

:1, $s/root/liudehua/g
或
:%s/root/liudehua/g

3.4 Vim 删除文本-命令模式

快捷键 功能描述
x 删除光标所在位置的字符
dd 删除光标所在行
ndd 删除当前行(包括此行)后n行文本
dG 删除光标所在行一直到文件末尾的所有内容
D 删除光标位置到行尾的内容
:a1,a2d 函数从a1行到a2行的文本内容

注意,被删除的内容并没有真正删除,都放在了剪贴板中。将光标移动到指定位置处,按下 "p"键,就可以将刚才删除的内容又粘贴到此处。

3.5 Vim复制文本-命令模式

快捷键 功能描述
p 将剪贴板中的内容复制到光标后
P 将剪贴板中的内容复制到光标前
yy 将光标所在行复制到剪贴板,此命令前可以加数字n,可复制多行
yw 将光标位置的单词复制到剪贴板

3.6 Vim其他常用快捷键

某些情况下,可能需要把两行进行连接。比如说,下面的文件中有两行文本,现在需要将其合并成一行(实际上就是将两行间的换行符去掉)。可以直接在命令模式中按"J"键。


4.0 Vim保存退出文本

Vim的保存和退出是在编辑模式中进行的。

命令 功能描述
:wq 保存并退出Vim编辑器
:wq! 保存并强制退出Vim编辑器
:q 不保存就退出Vim编辑器
:q! 不保存,且强制退出Vim编辑器
:w 保存但是不退出Vim编辑器
:w! 强制保存文本
:w filename 另存到filename文件
x! 保存文本,并退出Vim编辑器,更通用的一个vim命令
ZZ 直接退出Vim编辑器

需要注意的是,"w!"和"wq!"等类似的指令,通常用于对文件没有写权限的时候(显示 readonly,如图12所示),但如果你是文件的所有者或者root用户,就可以强制执行。


5.0 Vim移动光标

5.1 光标以字母为单位移动

快捷键 功能描述
j/下 光标向下移动一行(以回车为换行符),也就是光标向下移动
k/上 光标向上移动一行(也就是向上移动)
h/左 光标向左移动一位
i/右 光标向右移动一位

5.2 光标以单词为单位移动

快捷键 功能描述
w 或 W 光标移动至下一个单词的单词首
b 或 B 光标移动至上一个单词的单词首
e 或 E 光标移动至下一个单词的单词尾
nw 或 nW n为数字,表示光标向右移动n个单词
nb 或 nB n为数字,表示光标向左移动n个单词

5.3 光标移动至行首或行尾

快捷键 功能描述
0 或 ^ 光标移动至当前行的行首
$ 光标移动至当前行的行尾
n$ 光标移动至当前行只有n行的行尾,n为数字

5.4 光标移动至指定字符

快捷键 功能描述
fx 光标移动至当前行中下一个x字符处
Fx 光标移动至当前行中下一个x字符处

5.5 光标移动到指定行

快捷键 功能描述
gg 光标移动到文件开头
G 光标移动至文件末尾
nG 光标移动到第n行,n为数字
:n 编辑模式下使用的快捷键,可以将光标快速定义到指定行的行首

5.6 光标移动到匹配的括号处

程序员在编辑程序时,经常会为将光标移动到与一个 "(" 匹配的 ")" (对于 [] 和 {} 也是一样的)处而感到头疼。Vim里面提供了一个非常方便地査找匹配括号的命令,这就是 "%"。


6.0 Vim多窗口编辑

在编辑文件时,可以使用Vim同时打开两个文件,每个文件分别占用一个窗口。
例如,在査看 /etc/passwd 时需要参考 /etc/shadow,有两种办法可以实现:

方法一:

  1. 先使用Vim打开第一个文件;
  2. 接着输入命令":sp/etc/shadow",水平切分窗口,然后按回车键;
  3. 如果想垂直切分窗口则可以输入 ":vs/etc/shadow";

方法二:

可以直接执行命令"vim -o 第一个文件名 第二个文件名",也就是 "vim-o /etc/passwd /etc/shadow"。

  • 切换到另一个文件窗口,可以按"Ctrl+W"快捷键。
  • 如果想将一个文件的内容全部复制到另一个文件中,则可以输入命令":r 被复制的文件名",即可将导入文件的全部内容复制到当前光标所在行下面。

7.0 Vim批量注释

连续行的注释其实可以用替换命令来完成。换句话说,在指定范围行加"#"注释,可以使用 ":起始行,终止行 s/^/#/g",例如:

:1,10s/^/#/g
  • 表示在第1~10行行首加"#"注释。"^"意为行首;"g"表示执行替换时不询问确认。如果希望每行交互询问是否执行,则可将"g"改为"c"。

取消连续行注释,则可以使用":起始行,终止行s/^#//g",例如:

:1,10s/^#//g
  • 意为将行首的"#"替换为空,即删除。

添加"//"注释要稍微麻烦一些,命令格式为":起始行,终止行 s/^////g"。例如:

:1,5s/^/\/\//g
  • 表示在第1~5行行首加"//"注释,因为"/"前面需要加转义字符 "\",所以写出来比较奇特。

以上方法可以解决连续行的注释问题,如果是非连续的多行就不灵了,这时我们可以定义快捷键简化操作。格式如下:

:map 快捷键 执行命令
  • 如定义快捷键"Ctrl+P"为在行首添加"#"注释,可以执行":map^P l#<Esc>"。其中"^P"为定义快捷键"Ctrl+P"。注意:必须同时按"Ctrl+V+P"快捷键生成"^P"方可有效,或先按 "Ctrl+V"再按"Ctrl+P"也可以,直接输入"^P"是无效的。
  • "l#<Esc>"就是此快捷键要触发的动作,"l"为在光标所在行行首插入,"#"为要输入的字符,"<Esc>"表示退回命令模式。"<Esc>"要逐个字符输入,不可直接按键盘上的Esc键。
  • 设置成功后,直接在任意需要注释的行上按"Ctrl+P"快捷键,就会自动在行首加上"#" 注释。取消此快捷键定义,输入":unmap^P"即可。
  • 我们可以延伸一下,如果想取消文件行首的快捷键,则可以设置":map^B 0x",快捷键为 "Ctrl+B", "0" 表示跳到行首,"x" 表示删除光标所在处字符。
  • 再如,有时我们写完脚本等文件,需要在末尾注释中加入自己的邮箱,则可以直接定义每次按快捷键 "Ctrl+E" 实现插入邮箱,定义方法为 ":map^E asamlee@itxdl.net<Esc>"。其中 "a" 表示在当前字符后插入,"samlee@itxdl.net" 为插入的邮箱,"<Esc>" 表示插入后返回命令模式。
  • 将快捷键对应的命令保存在 .vimrc 文件中,即可在每次使用 Vim 时自动调用,非常方便。

8.0 Vim显示行号

在命令模式下输入":set nu"即可显示每一行的行号,如果想要取消行号,则再次输入":set nonu"即可。
如果希望每次打开文件都默认显示行号,则可以编辑Vim的配置文件。每次使用Vim 打开文件时,Vim 都会到当前登录用户的宿主目录(用户配置文件所在地)中读取 .vimrc 文件,此文件可以对 Vim 进行一些默认配置设定。

8.1 常见的可以写入.vimrc文件中的设置参数

快捷键 功能描述
:set nu/:set nonu 设置与取消行号
:syn on/:syn off 是否依据语法显示相关的颜色帮助。在Vim中修改相关的配置文件或Shell脚本文件 时(如前面示例的脚本/etc/init.d/sshd),默认会显示相应的颜色,用来帮助排错。如果觉得颜色产生了干扰,则可以取消此设置
set hlsearch/set nohlsearch 设置是否将査找的字符串高亮显示。默认是hlsearch高亮显示
set nobackup/set backup 是否保存自动备份文件。默认是nobackup不自动备份。如果设定了:set backup,则会产生“文件名〜”作为备份文件
set ruler/set noruler 设置是否显示右下角的状态栏。默认是ruler显示
set showmode/set noshowmode 设置是否在左下角显示如“一INSERT--”之类的状态栏。默认是showmode显示
  • 设置参数实在太多了,这里只列举了常见的几个,可以使用":set all"命令査看所有的设置参数。这些设置参数都可以写入 .vimrc 配置文件中,让它们永久生效,也可在 Vim 中执行,让它们临时生效。
  • 注意,表中各配置参数前面可以添加冒号(:),也可以省略,两种写法都可以。

9.0 Vim 配置文件(.vimrc)

Vim 配置文件分为系统配置文件和用户配置文件:

系统配置文件位于 Vim 的安装目录(默认路径为 /etc/.vimrc)。
用户配置文件位于主目录 ~/.vimrc,即通过执行 vim ~/.vimrc 命令即可对此配置文件进行合理修改。通常情况下,Vim 用户配置文件需要自己手动创建。
注意,Vim 用户配置文件比系统配置文件的优先级高,Vim 启动时,会优先读取 Vim 用户配置文件。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容