vim编辑器使用积累
常用操作
- 匹配
ab ab
\(\S\+\)\s\1
\([^\s]\+\)\s\1
- 删除偶数行
%s/\.*\n/\r/g
:g/^/+1 d
- 合并相邻的重复行
%s/^\(.*\)\n\1/\1/gc
sort -u
- 非贪婪匹配(non-greedy)
\{-}
比如a.\{-}b
匹配’abaab’的结果是’ab’,’aab’ - dot match newline:
\_.
比如\_.*
匹配所有内容,包括换行 - Case isensitive
\c
- 计数
press g & ctrl+g
或%s/[^ ]//gn
- 打开当前目录
:Ex
- 多窗口浏览:通过
:vs file
或:sv file
在多窗口中打开文件,最大化当前窗口Ctrl+w |
,所有窗口等大小Ctrl+w =
- tab操作:在tab中打开
:tabe file
,切换到第3个tab::tabn3
搜索和替换
- 搜索
/word
向下搜索word,按n搜索下一个,加shift搜索上一个?word
向上搜索word,…
- 替换:
[rage]s/pattern/string/[c,e,g,i]
- / 斜杠是命令分割符,也可以使用#符号
- rage: 指的是范围,1,7 指從第一行至第七行,1,$ 指從第一行至最後一行,也可以用 % 代表。
- patter: 就是要被替换掉的字串,可以用正则表达式來表示。
- string: 替换pattern的文本,可以用&符号表示拼接匹配到的内容
- [c,e,g,i]四个选项,可以组合使用,分别表示:
- c(cofirm):每次替换前询问
- e: 不显示error
- g(globe): 不询问,整行替换,否则只替换第一个
- i(igore): 不分大小写
高级规则
global命令实际上是分成两步执行:首先扫描[rage]指定范围内的所有行,给匹配{pattern}的行打上标记;然后依次对打有标记的行执行{command}命令,如果被标记的行在对之前匹配行的命令操作中被删除、移动或合并,则其标记自动消失,而不对该行执行{command}命令。{command}可以是一个ex命令,也可以是用|分隔的多个ex命令,这样我们就可以对被标记行,或从标记行寻址到的行进行多种不同的操作。
使用vim的剪贴板系统
- vim有12个粘贴板,分别是0、1、2、…、9、a、”、+;用:reg命令可以查看各个粘贴板里的内容
- 要将vim的内容复制到某个粘贴板:
- 在Viseal模式下选择要复制的内容,然后按
"y
完成复制,其中N为粘贴板号(注意是按一下双引号然后按粘贴板号最后按y) - 在ormal模式下,按
"Nyy
完成复制当前行到N号剪贴板,可举一反三
- 在Viseal模式下选择要复制的内容,然后按
*
号剪贴板是vim默认的,即在vim中简单用y只是复制到“(双引号)粘贴板里,同样用p粘贴的也是这个粘贴板里的内容;+
号粘贴板是系统粘贴板,用”+y将内容复制到该粘贴板后可以使用Ctrl+V将其粘贴到其他文档(如firefox、gedit)中,同理,要把在其他地方用Ctrl+C或右键复制的内容复制到vim中,需要在正常模式下按”+p;
文件编码
- 在Vim中可以直接查看文件编码
:set fileecoding
即可显示文件编码格式。 - 如果只是想查看其它编码格式的文件或者想解决用Vim查看文件乱码的问题,那么可以在~/.vimrc 文件中添加以下内容:
set ecoding=utf-8 fileencodings=ucs-bom,utf-8,cp936
这样,就可以让vim自动识别文件编码(可以自动识别UTF-8或者GBK编码的文件),其实就是依照fileencodings提供的编码列表尝试,如果没有找到合适的编码,就用latin-1(ASCII)编码打开。 - 文件编码转换,在Vim中直接进行转换文件编码,比如将一个文件转换成utf-8格式
:set fileecoding=utf-8
退出
- q(quit):退出Vim
- w(write):存盘
- w + 文件名:另存为指定文件
- w!+ 文件名:另存为指定文件,如该文件已存在,覆盖已有文件
- wq(与:x等价):存盘退出
- q!:不存盘退出
- wq!:强制存盘退出
- ZZ:存盘并退出Vi
移动命令
- 上下左右(可以用方向键直接移动)
- h 左,或 Backspace 或 方向键
- j 下,或 回车 或 + 或 方向键
- k 上,或 - 或 方向键
- l 右,或 Space 或 方向键
- 移动到行首: ^ (移至第一个非空字符)或 Home键(移至行首,包括空字符)
- 移动到行尾: $ 或 Ed键
- 移动到当前页的首行: H
- 移动到当前页的中间行: M
- 移动到当前页的最后一行: L
- 以word为单位移动: w
- 显示行号:
:set umber
或:set nu
- 移动到第行:
:n
- 向上滚动一屏(即Pagedow):
Ctrl + b(backward)
- 向下滚动一屏(即Pageup):
Ctrl + f (forward)
- 屏幕向下滚动一行:
Ctrl + e
删除命令
- 删除光标所在行
- dd(delete):删除光标所在行,下一行自动上移
- DD :删除光标所在行,下一行不上移
- 删除一个字符
- x:删除光标所在字符
- X:删除光标前的字符
- 删除个字符
- x:删除从光标处字符开始的n个字符
- X:删除从行首开始的n个字符
复制与粘贴
- yak和put分别对应Windows下的Copy和Paste
- yy(yak):复制当前行
- yy: 复制多行
- yw:复制一个词
- p(put):粘贴到光标后
- P:粘贴到光标前
vim 三种模式
- ormal mode:Vim的缺省模式,在该模式下运行命令。
- Isert mode:在该模式下插入/写文本。
- Visual mode:在该模式下可以选择一块文本区域,并对该区域内的文本执行命令或编辑操作。