1 VIM快捷键
o
在当前光标下一行插入
O
在当前光标上一行插入
^
跳转到行首
$
跳转到行尾
G
跳转到最后1行
gg
跳转到第1行
ngg
跳转到第n行
dd
剪切或删除
5dd
剪切或删除当前行及其下文一共5行的数据
dG
删除当前行至最后1行
d^
删除当前光标前一个字符到行首
d$
删除当前光标到行首
dw
删除当前光标到单词结尾
p
在当前光标的下一行粘贴
5p
在当前光标的下一行进行5次粘贴
P
在当前光标的上一行粘贴
5P
在当前光标的上一行进行5次粘贴
yy
复制
5yy
复制当前行及其下文一共5行的数据
u
撤销上一次的操作
ctrl + r
撤销后重做上一次操作
2 文件异常退出的问题
当上次打开vi编辑文件,没保存就关闭ssh会话时,再次打开文件会报错。

因为上次编辑的内容保存在内存中,退出时为防数据丢失,会自动生成一个
.原文件名
的临时文件,保存了未保存的内容。此时输入R
就能恢复未保存的内容,保存退出后,需手动删除.原文件名
的临时文件,避免下次打开文件继续提示。
以上图为例,删除.f1.txt.swp文件
[root@node1 ~]$ rm -f .f1.txt.swp
3 底线命令模式
:/关键字
搜索,回车后按n
,向下查找,按N
,向上查找
:!cmd
执行shell命令
:set number 或 set nu
显示行号
:set nonu
关闭显示行号
:50
快速跳转到第50行
:set ignorecase 或 set ic
忽略大小写常配合查找使用
:set noic
区分大小写
:set list
显示每行的结束字符$
:1,4move9
将1~4行的内容移动到第9行后
:1,4copy9
将1~4行的内容复制到第9行后
替换
(1)带g,每行匹配的内容全部替换
:1,3s/patten1/XXX/g
将1~3行的pattern1替换为XXX
:%s/patten1/XXX/g
将全文的pattern1替换为XXX
:2,$%s/patten1/XXX/g
将第2行至结尾的pattern1替换为XXX
(2)不带g,每行匹配的内容只替换第一个
:1,3s/patten1/XXX/
将1~3行的第一个pattern1替换为XXX
:%s/patten1/XXX/
将全文每行的第一个pattern1替换为XXX
:2,$%s/patten1/XXX/g
将第2行至结尾每行的第一个pattern1替换为XXX
(3)使用\1、\2代表前面()内的匹配部分
:%s/1(.*)2/3\14/g
将12中间的部分,前面添加3后面添加4
(4)使用&代表前面pattern匹配的内容
:%s/1.*2/3&4/g
将1.*2这个pattern代表的内容,前面添加3后面添加4
(5)删除\r
vim -b xxx.txt
二进制模式打开文件,\r
显示成^M
。
:%s/\r//g
删除\r
。
4 列模式
ctrl + v
进入列编辑,按方向键选择要编辑的部分
列插入:
shitf + i
,输入内容后按esc
列删除:
x
5 配置vimrc显示作者、时间等信息
配置/etc/vim/vimrc
文件,在配置文件最后添加如下信息。
"在文件中按F7调用
nmap <F7> ms:call TitleDet() <cr>'s
function AddTitle()
call append (0,"/*********************************************************************")
call append (1," * Author : WangHaoTian")
call append (2," * Email : wanghaotian87@126.com")
call append (3," * Last modified : ".strftime("%Y-%m-%d %H:%M"))
call append (4," * Filename : ".expand("%:t"))
call append (5," * Description : ")
call append (6," * ******************************************************************/")
echohl WarningMsg | echo "Adding coryright Successfully !!" | echohl None
endfunction
"在上面代码中添加自己的版权信息
"更新最近修改时间和文件名
function UpdateTitle()
normal m'
execute '/* Last modified\s*:/s@:.*$@\=strftime(": %Y-%m-%d %H:%M")@'
normal ''
normal mk
execute '/* Filename\s*:/s@:.*$@\=": ".expand("%:t")@'
execute "noh"
normal 'k
echohl WarningMsg | echo "Updating coryright Successfully !!" | echohl None
endfunction
"判断前6行代码里面,是否有Last modified这个单词,
"如果没有的话,代表没有添加过作者信息,需要新添加;
"如果有的话,那么只需要更新即可
function TitleDet()
let n=1
while n<7
let line = getline(n)
if line =~ '^\s*\*\s*Last\smodified\s*:\s*\S*.*$'
call UpdateTitle()
return
endif
let n = n+1
endwhile
call AddTitle()
endfunction
网友评论