Vim 简介
Vi 最初是由 Bill Joy 在 1976 年编码实现的。而 Vim (Vi IMproved) 则是改进的 Vi,由 Bram Moolenaar 在 1991 年开发并发布。Vi/Vim 是所有 Unix/Linux 操作系统默认配备的编辑器。因其强大的功能和高效的操作,Vi/Vim也成为众多 Unix/Linux 用户、管理员必须掌握并熟练使用的编辑工具之一。尤其是在没有图形界面的情况下,更是离不开 Vi/Vim。Vi/Vim 命令非常多、用法极为灵活,掌握起来有一定的难度。
启动及关闭 Vi/Vim
vi 打开 Vi/Vim
:q 退出
:q! 不保存并退出(强制退出)
:w 保存
:wq 保存并退出
文件命令
打开单个文件 vim file
同时打开多个文件 vim file1 file2 file3 ...
切换到下一个文件 :bn
切换到上一个文件 :bp
查看当前打开的文件列表,当前正在编辑的文件会用[]括起来。 :args
关闭当前编辑的文件,并开启新的文件。如果对当前文件的修改未保存,vi会警告。 :e file
编译一个未命名的新文档。(CTRL-W n) :e new
改变编辑的文件名,这时再保存相当于另存为。:f filename
另存为:saveas newfilename
会打开一个文件浏览器让你选择要编辑的文件。:browse e
用browse打开的起始目录可以由browsedir来设置:
:set browsedir=last -- 用上次访问过的目录(默认);
:set browsedir=buffer -- 用当前文件所在目录;
:set browsedir=current -- 用当前工作目录;移动光标
1、逐字符移动:
h: 左l: 右j: 下k: 上
2、以单词为单位移动
w: 移至下一个单词的词首
e: 跳至当前或下一个单词的词尾
b: 跳至当前或前一个单词的词首
3、行内跳转:
0: 绝对行首
^: 行首的第一个非空白字符
$: 绝对行尾
g_ : 到本行最后一个不是blank字符的位置。
4、行间跳转
nG:跳转至第n行
gg: 第一行
G:最后一行
5、末行模式
.: 表示当前行
$: 最后一行
n:第n行
6、翻屏
Ctrl+f: 向下翻一屏
Ctrl+b: 向上翻一屏
Ctrl+d: 向下翻半屏
Ctrl+u: 向上翻半屏
H 移到屏幕顶部,high
M 移到屏幕中央,middle
L 移到屏幕底部,low
7、高级技巧
fs 向后移动到字符s的第一次出现的字符处
Fs 向前移动到字符s的第一次出现的字符处
ts 向后移动到字符s的第一次出现的前一个字符处
Ts 向前移动到字符s的第一次出现的后一个字符处
注 继续查找下一个可使用 ; 继续
插入文本
基本插入
a: 在当前光标所在字符的后面,转为输入模式;
i: 在当前光标所在字符的前面,转为输入模式;
a: 在当前光标所在字符的后面,转为输入模式;
o: 在当前光标所在行的下方,新建一行,并转为输入模式;
I:在当前光标所在行的行首,转换为输入模式
A:在当前光标所在行的行尾,转换为输入模式
O:在当前光标所在行的上方,新建一行,并转为输入模式;
改写插入
diw 删除当前光标所在的word(不包括空白字符)
daw 删除当前光标所在的word(包括空白字符)
c[n]l: 改写光标处以及光标后的总共n个字母。
c[n]h: 改写光标前n个字母。
[n]cc: 修改当前[n]行。
[n]S: 删除指定数目的行,并以所输入文本代替。
注意,类似cnw,dnw,ynw的形式同样可以写为ncw,ndw,nyw。
一个小技巧:按8,再按i,进入插入模式,输入=,按esc进入命令模式,就会出现8个=这在插入分割线时非常有用
如30i+<esc>就插入了36个+组成的分割线。
剪切复制和寄存器
剪切和复制、粘贴
diw 剪切光标所在的word(不包括空白字符)
daw 剪切当前光标所在的word(包括空白字符)
dd 剪切当前行
:m,nd 剪切m行到n行的内容。
yiw 复制光标所在的word(不包括空白字符)
yaw 复制当前光标所在的word(包括空白字符)
yy 复制当前行
:m,ny 复制m行到n行的内容。
yit : 复制一个html标签中的内容
yft: 复制当前行上光标到第一个t之间的所有内容
p: 如果复制的是整行在下一行粘贴,如果复制的是单词则在光标之后粘贴
寄存器
1.无名寄存器(")(默认寄存器)
2.复制专用寄存器 (0)
存放最近使用最多的y命令生成的文本内容,如果未显式指定其内容
3.系统剪贴板(X11视窗系统下的主剪贴板)(*)
"+:系统剪贴板。"+yy把当前行的内容放入系统剪贴板。
4.黑洞寄存器 (_)
5.命名寄存器 (a-z)
"ayy把当前行的内容放入a寄存器
当向寄存器中写入内容的时候(即复制或者剪切的时候),大写字母表示的是将当前要复制的内容追加到寄存器中,而小写字母
表示的是将当前要复制的内容将寄存器中的原有内容给覆盖掉
6.表达式寄存器 (=)
<C-r>= :按下<Ctrl>+r键,再按等号键,此时就可以输入表达式了
7.其他的一些只读寄存器("/寄存器特殊)
7.1 当前文件名寄存器 (%)
7.2 轮换文件名寄存器 (#)
7.3 上次执行的ex命令(:)
7.4 上次查找的关键字 (/)
:reg 显示所有寄存器的内容。
常用的替换命令
:s / old / new / 这将把当前中模式old的第一次出现修改为new
:s / old / new / g 把当前行old的每次出现改为new
:% s / old / new / g 把整个文件中的old的每次出现都改为new利用替换命令添加(删除)注释
:a , b s/^/ \/ \/ /g - 在a-b行的行首插入//,^表示行首。
:a , b s/^ \/ \/ //g - 在a-b行的行首插入空格,^表示行首。