全屏编辑器:nano、vi(Visual Interface)、vim(Vi IMproved)

行编辑器: sed


Vim模式:命令模式、编辑模式、输入模式、末行模式


获取帮助:

1、vimtutor

2、vim下输入help


Vim编辑器使用_vim


模式转换(默认为编辑模式):

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