全屏编辑器:nano、vi(Visual Interface)、vim(Vi IMproved)
行编辑器: sed
Vim模式:命令模式、编辑模式、输入模式、末行模式
获取帮助:
1、vimtutor
2、vim下输入help
模式转换(默认为编辑模式):
i[nsert] | 当前光标所在字符处前转换为输入模式 |
a[ppend] | 当前光标所在字符处后转换为输入模式 |
o | 当前光标所在行的下一新行转换为输入模式 |
I | 当前光标所有行的行首转换为输入模式 |
A | 当前光标所有行的行尾转换为输入模式 |
O | 当前光标所在行的上一新行转换为输入模式 |
Esc | 由输入模式转换为编辑模式 |
: | 由编辑模式转换为末行模式(可查看历史命令) |
Esc,Esc | 由末行模式转换为编辑模式 |
光标跳转:
h | 向左移动一个字符 |
l | 向右移动一个字符 |
j | 向下移动一个字符 |
k | 向上移动一个字符 |
#h | 向左移动#个字符 |
w | 跳到后一个单词的词首 |
e | 跳到当前或下一个单词的词尾 |
b | 跳到当前或下一个单词的词首 |
) | 跳到下一句的句首 |
( | 跳到上一句的句首 |
} | 跳到下一段的段首 |
{ | 跳到上一段的段首 |
1G 或 gg | 跳到首行 |
G | 跳到尾行 |
#G | 跳到第#行 |
^ | 跳到行首的第一个非空白字符 |
$ | 跳到绝对行尾 |
0 | 跳到绝对行首 |
文件关闭:
w | 保存 |
q | 退出 |
! | 强制 |
x | 保存并退出 |
ZZ(编辑模式) | 保存并退出 |
qall | 退出所有 |
only | 闭关除当前窗口外的文件 |
打开文件:
vim +# | 打开文件并将光标移到第#行首 |
vim + | 打开文件并将光标移动最后一行 |
next | 显示下一个文件 |
prev | 显示上一个文件 |
first | 显示第一个文件 |
last | 显示最后一个文件 |
new|edit FILENAME | 在VIM中打开新的文件,new不加文件名表示新建文件 |
地址定界:
1,7 | 第1行到7行 |
% | 全文 |
1,$ | 第1行到最后行 |
1,+6 | 第1行及以下6行 |
1,$-2 | 第1行到倒数第3行 |
.,+3 | 当前行及以下3行 |
编辑命令:
u[ndo] | 撤消操作(默认记录50次操作) |
Ctrl+r | 取消此前的撤消 |
x | 删除当前光标所在字符 |
#x | 删除当前光标所在字符至第#个字符 |
dw | 删除当前光标所在处,至单词尾部 |
db | 删除当前光标所在处前一字符,至单词首部 |
de | 删除当前光标所在处,至单词尾部 |
d^ | 删除当前光标所在处前一字符,至行首 |
d$ 或 D 或 C | 删除当前光标所在处,至行尾 |
cc | 删除当前行,并转换到输入模式 |
#cc | 删除当前行至以下#行,并转换为输入模式 |
yy | 复制当前行 |
#yy | 复制光标当前行至第#行 |
y$ | 复制光标所在处至行尾 |
y^ | 复制光标所在处前一字符至行首 |
p[aste|ut] | 粘贴至光标所在处之后,或下方 |
P | 贴至光标所在处之前,或上方 |
Ctrl+f | 向文件尾部翻一屏 |
Ctrl+b | 向文件首部翻一屏 |
Ctrl+d | 向文件尾部翻半屏 |
Ctrl+u | 向文件首部翻半屏 |
/keyword | 当前光标所在处向文件尾部查找 |
?keyword | 当前光标所在处向文件首部查找 |
n | 下一个,跟查找命令相同的方向 |
N | 上一个,跟查找命令相反的方向 |
> | 向右缩进 |
< | 向左缩进 |
可视化模式:
v | 选中光标划过的字符 |
V | 选中光标划过的行 |
Ctrl+w,s 或 split | 水平分割窗口 |
Ctrl+w,v 或 vsplit | 垂直分割窗口 |
Ctrl+w,s 或 30s | 水平分割窗口,窗口高度为30 |
Ctrl+w,s 或 30vs | 垂直分割窗口,窗口宽度为30 |
Ctrl+w,+/- | 调整窗口高度(默认每次调整1) |
Ctrl+w,</> | 调整窗口宽度(默认每次调整1) |
res[ize] N | 调整窗口高度为N |
vert[ical] res[ize] N | 调整窗口宽度为N |
-o | 水平分割窗口(一次打开多个文件时) |
-O | 垂直分割窗口(一次打开多个文件时) |
Ctrl+ww | 多个窗口间切换 |
Ctrl+w,l|方向键 | 切换到右侧窗口 |
Ctrl+w,h|方向键 | 切换到左侧窗口 |
Ctrl+w,k|方向键 | 切换到上方窗口 |
Ctrl+w,j|方向键 | 切换到下方窗口 |
Ctrl+w,L | 将当前窗口移动到右侧窗口 |
Ctrl+w,H | 将当前窗口移动到左侧窗口 |
Ctrl+w,K | 将当前窗口移动到上方窗口 |
Ctrl+w,J | 将当前窗口移动到下方窗口 |
文件对比:
vim -d FILE1 FILE2 | 比较模式打开两个文件 |
vimdiff FILE1 FILE2 | |
diffsplit FILE2 | 当前文件与新文件对比,并水平分割窗口 |
vert[ical] diffsplit FILE2 | 当前文件与新文件对比,并垂直分割窗口 |
diffthis | 对比已打开的2个窗口内容 |
diffupdate | 文本内容修改后,更新对比检查 |
[c | 跳到前一个不同点 |
]c | 跳到后一个不同点 |
set diffopt=context:N | 只显示不同点的行,及前后N行(也是折叠) |
zo (fold open) | 展开折叠(配合diffopt) |
zc (fold close) | 重新折叠(配合diffopt) |
set noscrollbind | 取消两个窗口联动 |
set scrollbind | 绑定两个窗口联动(默认为联动) |
set scrollopt ver,hor,jump | ver:启用垂直同步滚动 hor:启用水平同步滚动 jump:切换窗口时,使垂直滚动始终同步 |
syncbind | 同步两上窗口的光标位置 |
环境设置:
vim的配置文件:
全局:/etc/vimrc
个人:~/.vimrc
set all | 查看所有set选项(显示所有的vi环境变量可能取值及其当前设置值) |
set | 显示当前所有的vi环境变量设置 |
syntax on/enable/off | 自动语法高亮 |
set hl/nohl(hlsearch) | 高亮显示搜索结果 |
set hidden | 没有保存的缓冲区可以自动被隐藏 |
set sm/nosm(showmatch) | 显示括号配对,当键入“]”“)”"}"时,高亮度显示匹配的括号/缺省不高亮 |
set showmode/shownomode | 处于文本输入方式时加亮按钮条中的模式指示器/缺省不指示当前模式 |
set ruler | 打开状态栏标尺 |
set scrolloff=5 | 设定光标离窗口上下边界 5 行时窗口自动滚动 |
set ai/noai(autoindent) | 自动缩进,新行与前面的行保持—致的自动空格/不自动空格(缺省) |
set aw/noaw | 自动写,转入shell或使用:n编辑其他文件时,当前的缓冲区被写入/不写 |
set cindent | 以C/C++的模式缩进(在C编码时,用户常常想要indent缩进内嵌代码块) |
set smartindent | 为C程序提供自动缩进 |
set flash/noflash | 在出错处闪烁但不呜叫(缺省)/使用呜叫而不闪烁 |
set ic/noic(ignorecase) | 在查询及模式匹配时忽赂大小写/不忽略大小写(默认区分大小写) |
set nu/nonu(number) | 屏幕左边显示行号/不显示行号(缺省) |
set showcmd | 在状态栏显示目前所执行的指令,未完成的指令片段亦会显示出来 |
set warn/nowarn | 对文本进行了新的修改后,离开shell时系统给出显示(缺省) |
set ws/nows | 在搜索时如到达文件尾则绕回文件头继续搜索 |
set wrap/nowrap | 长行显示自动折行 |
colorscheme evening | 设定背景为夜间模式 |
filetype on | 通过$VIMRUNTIME/filetype.vim.打开文件类型检测 |
filetype plugin on | 自动识别文件类型,自动匹配对应的, “文件类型Plugin.vim”文件,使用缩进定义文件 |
set shiftwidth=4 | 设定 << 和 >> 命令移动时的宽度为 4 |
set softtabstop=4 | 使得按退格键时可以一次删掉 4 个空格,不足 4 个时删掉所有剩下的空格) |
set tabstop=4 shiftwidth=4 | 设定 tab 长度为 4,移动(shift)命令时移动的字符数 |
set list/nolist | 显示不可视字符 |
set listchars = tab:>-,trail:- | 将制表符显示为'>---',将行尾空格显示为'-' |
set listchars=tab:.\ ,trail:. | 将制表符显示为'. ' |
set autochdir | 自动设置目录为正在编辑的文件所在的目录 |
查找替换:
:地址定界s/查找模式/替换成的内容/gi
:地址定界s@查找模式@替换成的内容@gi
:g/查找模式/s/查找模式/替换成的内容/gi
1) g:global (全局,没有选项g则只替换每行每一次匹配到的模式)
2) i:ignorecase (忽略大小写)
3) /|@:分割符
e.g.
1、将所有/de/null替换为/tmp/log.txt
%s/\/dev\/null/\/tmp\/log.txt/g
%s@/dev/null@/tmp/log.txt@/g
2、将所有w开头,中间两个字母,并以o结尾的单词替换为where
%s/\<w[[:alpha:]]\{2\}o\>/where/g
3、将所有d开头,中间两个字母,并以n结尾的单词替换为大写字母
%s@\<d\([[:alpha:]]\{2\}\)n\>@D\1N@g
4、将所有game后加上over,忽略大小写
%s/\([gG][aA][mM][eE]\)/\1over/g
%s/[gG][aA][mM][eE]/&over/g
注:&表示模式匹配的内容
5、将所有空格开头的行前添加#号
%s/^[[:space:]]/#&/
%s@^[[:space:]]@#&@
6、删除空白行
:g/^$/d
:%s/^\n//g
:g/^\n/s///g
7、删除多行空白行,保留一行空白行
:%s/^\n$//g
8、将以path开头行中的GE替换为ge
:g/^path/s/GE/ge/g