Vim 是一个功能强大的全屏幕文本编辑器,是 Linux/Unix 上最常用的文本编辑器,它的作用是建立,编辑,显示文本文件。
Vim 没有菜单,只有命令,
Vim 工作模式
Vim 的工作模式共有3种,命令模式,编辑模式,末行模式。
-
命令模式:在 shell 中使用
vim filename
命令进入到 vim 的编辑模式,filename 可以是已经存在的文件,也可以是不存在的文件(此时系统会自动创建文件)。在进入命令模式后,键盘输入的每一个字符,vim 都会将其当做一个命令执行。
-
编辑模式:在命令模式下,使用 i 、a、o 键进入到编辑模式,在编辑模式中所做的修改不会被保存,必须在末行模式下输入保存命令进行保存。
-
末行模式:在命令模式下,输入 : 进入到末行模式,在末行模式下可以对修改的文件内容进行保存、保存退出、或者直接退出 Vim。
Vim 命令模式
插入命令
用来移动光标并进入到编辑模式。
- a:在光标所在字符后插入。
- A:在光标所在行尾插入。
- i:在光标所在字符前插入。
- I:在光标所在行首插入。
- o:在光标下插入新行。
- O:在光标上插入新行。
- cw/cW:
定位命令
用来移动光标到指定位置。
-
gg:移动到第一行。
-
G:移动到最后一行。
-
nG:移动到第 n 行。
在末行模式下可以通过
:set nu
显示行号。 -
$:移动到行尾。
-
0:移动到行首。
-
%:移动到当前括号的另一半(需要先将光标移动到括号上)。
-
*:移动到下一个匹配单词。
-
#:移动到上一个匹配单词。
-
fs:移动到当前行的下一个 s 字母处(也可以是其他字母)。
-
Fs:移动到当前行的上一个 s 字母处(也可以是其他字母)。
-
w/W:到下一个单词的开头。
-
e/E:到下一个单词的结尾。
w/e 小写时,单词以字母、数字、下划线组成。W/E 时,单词以非空格的字符组成。
删除命令
用来删除文件内容。
- x:删除(剪切)光标所在的字符。
- nx:删除(剪切)光标所在处的后 n 个字符。
- dd:删除(剪切)光标所在行。
- ndd:删除(剪切)光标所在行后的 n 行。
- dG:删除光标所在行至行尾的内容。
- D:删除光标所在处到行尾的内容。
复制和剪切命令
用来复制和剪切文本内容。
- yy:复制光标所在行。
- nyy:复制光标所在行后的 n 行。
- x:剪切(删除)光标所在的字符。
- nx:剪切(删除)光标所在处的后 n 个字符。
- dd:剪切(删除)光标所在行。
- ndd:剪切(删除)光标所在行后的 n 行。
- p:当剪切板是使用 x、nx 剪切的内容时,将内容粘贴到光标后的位置;当剪切板是使用 d、nd 剪切的内容时,将内容粘贴到光标所在行的下一行。
- P:当剪切板是使用 x、nx 剪切的内容时,将内容粘贴到光标前的位置;当剪切板是使用 d、nd 剪切的内容时,将内容粘贴到光标所在行的上一行。
其他命令
- r:替换光标所在处的字符。
- R:从光标所在处开始替换字符,按 Esc 结束。
- u:取消上一步操作。
-
ctrl + r:重做,将取消的上一步操作恢复。
-
/str:查找字符串 str。
-
n:在查找状态下,跳转到下一个匹配的字符串。
可以在末行模式下输入 :set ic 忽略大小写,此时查找会忽略大小写匹配。
取消忽略大小::set noic
- ZZ:退出到命令行。
Vim 末行模式
常用命令:
- :set nu:显示文件行号。
- :set nonu:取消文件行号显示。
- :set ic:(查找时)忽略大小写。
- :set noic:(查找时)取消忽略大小写。
- :n:跳转到第 n 行。
- :m,nd:删除第 m 行至第 n 行的内容。
- :range/old/new/options:查找并替换字符串。
- range:范围,
%s
全文替换,m,ns
替换 m - n 行的内容。 - old:原字符串。
- new:新字符串。
- options:g - 不询问,c - 替换前进行询问。
- range:范围,
- :w:保存修改。
- :w new_filename:另存为 new_filename 文件。
-
:wq:保存并退出。
- :q:直接退出(不保存),如果存在未保存的修改,需要添加 !。
Vim 高级技巧
向文件导入内容:
- :r /path/file:将外部文件的内容导入到光标所在的位置后。
- :!command:不退出 Vim 的情况下执行命令。
小技巧::r !command,将命令的执行结果直接导入到文件中。
^ 符号的使用:在 vim 中,^ 用来指代行首的位置。
使用示例:
- :m,ns/^/#/g:注释 m - n 行的内容。
- :m,ns/^#//g:取消注释 m - n 行的内容(^# 表示只匹配行首的 #)。
命令的重复:
- .:小数点,重复上一次的命令。
- nxx:执行 xx 命令 n 次。
2dd - 连续删除 2 行;3p - 连续粘贴 3 次;10istar - 连续写下 10 个 star;
储存常用短语:
-
:ab original target:将 target 储存到 original 关键字中,在编辑模式下输入 original 时会自动替换为 target。
:ab mymail tiny.star@qq.com
:每次输入 mymail 时都会被替换为邮箱地址。
如果想要永久储存短语,需要修改用户家目录下的 .vimrc 文件。