VIM - Vi IMproved 使用
打开文件的命令选项及说明
vim使用的选项 | 说明 |
vim filename | 打开或者新建一个文件,并将光标处于第一行首部 |
vim -r filename | 恢复上次vim打开时崩溃的文件 |
vim -R filename | 把指定的文件以只读方式放入编辑器中 |
vim + filename | 打开文件并将光标处于最后一行的首部(也可以vim file +) |
vim +n filename | 打开文件,并将光标处于第n行的首部(也可以vim file +10) |
vim +/pattern filename | 打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首 |
vim -c command file filename | 在对文件进行编辑前,先执行指定的命令 |
插入与删除文件
命令 | 说明 |
ESC | 返回命令行模式 |
i | 在光标前输入 |
a | 在光标后输入 |
o | 在当前行之下新开一行 |
O(大写字母O) | 在当前行之上新开一行 |
I | 在当前光标所在行的行首输入 |
A | 在当前光标所在行的行尾输入 |
r char | 用char替换光标所在字符,输入r命令后,在键盘上输入需要替换的新字符即可完成替换 |
R text | 用text覆盖当前渔村所在位置的数倍,直到按下ESC键 |
x | 删除当前光标所在的字符 |
dd | 删除当前光标所在的行。删除后的内容自动保存在剪贴板 |
dw | 删除当前光标所在的单词 |
ndd | 向下删除n行 |
d$ | 删除当前光标所在位置至行尾的内容 |
d1G | 删除当前行至第一行 |
dG | 删除当前行至最后一行 |
J | 删除当前光标所在行行尾的换行符(拼接行) |
u | 撤销前一编辑命令 |
Ctrl+r | 重做上一次操作 |
. | 重复前一个操作 |
v | 配合方向键选中文本内容 |
yy | 将光标所在的行复制到剪贴板,如果在“yy”前加上数字,可复制多行 |
nyy | 复制光标向下n行 |
p | 将剪贴板的内容复制到光标后 |
P | 将剪贴板的内容复制到光标前 |
yw | 将光标所在的单词复制到剪贴板 |
移动光标
命令 | 说明 |
h或Backspace键 | 光标左移一个字符 |
l(小写字母l) | 光标右移一个字符 |
k或Ctrl+p | 光标上移一个字符 |
j、Ctrl | 光标下移一个字符 |
回车键 | 光标下移一行 |
w或W | 光标右移一个字到字首 结合d实现范围删除如dw |
b或B | 光标左移一个字到字首 结合d实现范围删除如db |
e或E | 光标右移一个字到字尾 结合d实现范围删除如de |
nG | 光标移动到第n行首部 |
nj | 光标下移n行 |
nk | 光标上移n行 |
n$ | 相对于当前光标所在行,光标再向后移动n行到行尾 |
H | 光标移至当前屏幕的顶行 |
M | 光标移至当前屏幕的中间行 |
L | 光标移至当前屏幕的最底行 |
0(数字0) | 将光标移至当前行首 |
$ | 将光标移至当前行尾 |
:$ | 将光标移动到文件最后一行的行首 |
搜索及替换
命令 | 说明 |
/abc | 在文件中向前查找字符串abc |
?abc | 在文件中向后查找字符串abc |
n | 在同一方向重复上次的搜索命令 |
N | 在相反方向重复上次的搜索命令 |
:s/a1/a2/g | 将当前渔村所在行中所有a1均用a2替换 |
:n1,n2s/a1/a2/g | 将文件第n1至n2行中所有a1均用a2替换 |
:g/a1/s//a2/g | 将文件中所有的a1均用a2替换 |
:set nu | 给文件的每行加上行号 |
清空文件:
在使用vim编辑器的时候,有时候编辑一个文件,而文件内容比较多,如果需要快速清空整个文件,可以使用一下命令: 在命令模式下,首先执行 gg 这里是跳至文件首行 再执行:dG 这样就清空了整个文件! 还有一种方法就要退出VIM,然后使用echo >> file ,这样也能快速清空文件内容,当然你也可以删除了这个文件再新建一个就是了。
翻屏操作:
Ctrl+f:向文件尾部翻一屏;
Ctrl+b:向文件首部翻一屏;
Ctrl+d:向文件尾部翻半屏;
Ctrl+u:向文件首部翻半屏;
输入模式 --> 编辑模式
ESC
编辑模式 --> 末行模式
:
末行模式 --> 编辑模式
ESC
关闭文件:
:q 退出
:q! 强制退出,丢弃做出的修改
:wq 保存退出
:x 保存退出
:x /PATH/TO/SOMEWHERE
ZZ:保存退出;
光标跳转:
字符间跳转:
h,j,k,l
h:左
l:右
j:下
k:上
#COMMAND:跳转由#指定的个数的字符;
例:向上走5行就是:5k
单词间跳转:
w:下一个单词的词首
e:当前或下一单词的词尾
b:当前或前一个单词的词首
#COMMAND:由#指定一次跳转的单词数;
行首行尾跳转:
^:跳转至行首的第一个非空白字符
0:跳转至行首
$:跳转至行尾
行间移动:
#G:跳转至由#指定行
G:跳转至行尾
1G,gg:第一行
句间移动:
)
(
段落间移动:
}
{
vim的编辑命令:
字符编辑:
x:删除光标处的字符;
#x:删除光标处起始的#个字符
xp:交换光标所在处的字符及其后面字符的位置
替换命令(r,replace)
r:替换光标所在处的字符
删除命令:
d:删除命令、可结合光标跳转字符,实现范围删除
d$:
d^:
d0:
dw:
de:
db:
#COMMAND
dd:删除光标所在的行;
#dd:多行删除
粘贴命令(p,put,paste)
p:缓冲区存的的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面;
P:缓冲区存的的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面;
复制命令(y,yank);
y:复制,工作行为相似于d命令;
y$
y0
y^
ye
yw
yb
#COMMAND
yy:复制行
#yy:复制多行;
改变命令(c,change)
c:修改
编辑模式 --> 输入模式
c$
c^
c0
cb
ce:把整个单词删除
cw
#COMMAND
cc:删除并输入新内容
#cc:一次删除多行
可视化模式:
v:按字符选定
V:按行选定
Note:经常结合编辑命令;
d,c,y
撤消此前的编辑:
u(undo):撤消此前的操作;
#u:撤消指定次数的操作;
撤消此前的撤消:
Ctrl+r
重复前一个编辑操作:
.
VIM自带的练习教程:
vimtutor vim使用手册
vim中的末行模式:
内建的命令行接口
(1)地址定界
:start_pos,end_pos
#:具体第#行,例如2表示第2行;
#,#:从左侧#表示行起始,到右侧#表示行结尾,例:1,20表示1至20行
#,+#:从左侧#表示的行起始,加上右侧#表示的行数;
.:当前行
$:最后一行
.,$-1:当前行到倒数第2行
%:全文,相当于1,$
/pat1/,/pat2/:从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束;
#,/pat/
/pat/,$
使用方式:
后跟一个编辑命令
d
y
w /PATH/TO/SOMEWHERE:将范围内的行另存至指定文件中;
r /PATH/FROM/SOMEFILE:在指定位置插入指定文件中的所有内容;
(2)查找
/PATTERN:从当前光标所在处向文件尾部查找;
?PATTERN:从当前光标所在处向文件首部查找;
n:与命令同方向
N:与命令反方向
(3)查找并替换
s:在末行模式下完成查找替换操作
s/要查找的内容/替换为的内容/
要查找的内容:可使用模式
替换为的内容:不能使用模式,但可以使用\1,\2,...等后向引用符号;还可以使用“&”引用前面查找时查找到的整个内容;
修饰符:
i:忽略大小写
g:全局替换;默认情况下,每一行只替换第一次出现;
例:.,$s/r\(..\)t/R\1T/g 把r..t的替换为R..T,中间的..要括起来,\1表示引用之前括起来的条件。
%s/\/etc\/fstab/\/var\/log/g %指全文/etc/fstab替换为/var/log,g表示全局。
查找替换中的分隔符/可替换为其它字符,例如
s@@@
s###
%s@/var/log@/etc/fstab@g 上面的可以改成
练习:
1、复制/etc/grub2.cfg至/tmp/目录,用查找替换命令删除/tmp/grub2.cfg文件中的行首的空白字符
:%s/^[[:space:]]\+//
58 次替换,共 58 行
2、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查的替换命令为/tmp/functions的每行开头为空白字符的行的行首添加一个#号
:%s/^[[:space:]]/#&/
433 次替换,共 433 行
多文件模式:
vim FILE1 FILE2 FILE3 ...
:next 下一个
:prev 前一个
:first 第一个
:last 最后一个
参考:
高俊峰 循序渐进Linux