您的位置:首页 > 其它

VIM常用命令总结

2011-10-02 22:57 239 查看
多标签切换网上这类的文章太多了,看上去有点像标题党。我在这里只是想总结一下自己常用的一些,如果有更好的可以随时留言,感激不尽!

首先介绍一下 vi/vim是 unix/linux 下极为普遍的一种文本编辑器, 大部分机器上都有 vi 有各种变种, 在不同的机器上常用不同的变种软件 其中 vim 比较好用也用得比较广泛 vim 是 Vi IMproved 的缩写, 表示更好的 vi 本文就说些其中比较有用, 比较常用的命令, 若能熟练运用这些命令, 那么会发现编辑文件很大帮助,尤其是做开发的人员,能快速的提高开发效率。

另附一张图,上面又一些非常常用的命令



说明:

以下的例子中 xxx 表示在命令模式下输入 xxx 并回车

以下的例子中 :xxx 表示在扩展模式下输入 xxx 并回车

小括号中的命令表示相关命令

在编辑模式或可视模式下输入的命令会另外注明

插入/保存

i →在光标前插入

a → 在光标后插入

o → 在当前行后插入一个新行

O → 在当前行前插入一个新行

w → 存盘

x →表示仅在需要时保存

wq→保存并退出

ZZ→不需要输入冒号并回车

saveas <path/to/file> → 另存为 <path/to/file>

e <path/to/file> → 打开一个文件

bn 和 bp → 你可以同时打开很多文件,使用这两个命令来切换下一个或上一个文件

qa! → 强行退出所有的正在编辑的文件,就算别的文件有更改。

查找

/xxx(?xxx) 表示在整篇文档中搜索匹配xxx的字符串, / 表示向下查找, ? 表示向上查找其中xxx可以是正规表达式,关于正规式就不多说了

一般来说是区分大小写的, 要想不区分大小写, 那得先输入

:set ignorecase

查找到以后, 再输入 n 查找下一个匹配处, 输入 N 反方向查找

*(#) 当光标停留在某个单词上时, 输入这条命令表示查找与该单词匹配的下(上)

一个单词 同样, 再输入 n 查找下一个匹配处, 输入 N 反方向查找

g*(g#) 此命令与上条命令相似, 只不过它不完全匹配光标所在处的单词, 而是匹配包含该单词的所有字符串

gd 本命令查找与光标所在单词相匹配的单词, 并将光标停留在文档的非注释段中第一次出现这个单词的地方

% 本命令查找与光标所在处相匹配的反括号, 包括 () [] { }

f(F)x 本命令表示在光标所在行进行查找, 查找光标右(左)方第一个x字符

找到后:

输入 ; 表示继续往下找

输入 , 表示反方向查找

快速移动光标

在 vi 中, 移动光标和编辑是两件事, 正因为区分开来, 所以可以很方便的进行光标定

位和编辑 因此能更快一点移动光标是很有用的

w(e) 移动光标到下一个单词

b 移动光标到上一个单词

0 移动光标到本行最开头

^ 移动光标到本行最开头的字符处

$ 移动光标到本行结尾处

H 移动光标到屏幕的首行

M 移动光标到屏幕的中间一行

L 移动光标到屏幕的尾行

gg 移动光标到文档首行

G 移动光标到文档尾行

c-f (即 ctrl 键与 f 键一同按下) 本命令即 page down

c-b (即 ctrl 键与 b 键一同按下, 后同) 本命令即 page up

'' 此命令相当有用, 它移动光标到上一个标记处, 比如用 gd, * 等查找到某个单词后, 再输入此命令则回到上次停留的位置

' 此命令相当好使, 它移动光标到上一次的修改行

` 此命令相当强大, 它移动光标到上一次的修改点

拷贝, 删除与粘贴

在 vi 中 y 表示拷贝, d 表示删除, p 表示粘贴 其中拷贝与删除是与光标移动命令

结合的, 看几个例子就能够明白了

x 删当前光标所在的一个字符。

yw 表示拷贝从当前光标到光标所在单词结尾的内容

dw 表示删除从当前光标到光标所在单词结尾的内容

y0 表示拷贝从当前光标到光标所在行首的内容

d0 表示删除从当前光标到光标所在行首的内容

y$ 表示拷贝从当前光标到光标所在行尾的内容

d$ 表示删除从当前光标到光标所在行尾的内容

yfa 表示拷贝从当前光标到光标后面的第一个a字符之间的内容

dfa 表示删除从当前光标到光标后面的第一个a字符之间的内容

特殊地:

yy 表示拷贝光标所在行

dd 表示删除光标所在行

D 表示删除从当前光标到光标所在行尾的内容

关于拷贝, 删除和粘贴的复杂用法与寄存器有关, 可以自行查询

数字与命令

在 vi 中数字与命令结合往往表示重复进行此命令, 若在扩展模式的开头出现则表示行

号定位 如:

5fx 表示查找光标后第5个x字符

5w(e) 移动光标到下五个单词

5yy 表示拷贝光标以下 5 行

5dd 表示删除光标以下 5 行

y2fa 表示拷贝从当前光标到光标后面的第二个a字符之间的内容

:12,24y 表示拷贝第12行到第24行之间的内容

:12,y 表示拷贝第12行到光标所在行之间的内容

:,24y 表示拷贝光标所在行到第24行之间的内容 删除类似

快速输入字符

在 vi 中, 不要求你输入每一个字符, 可以有很多种方法快速输入一些字符

使用 linux/unix 的同学一定有一个经验, 在命令行下输入命令时敲入头几个字符再按

TAB 系统就会自动将剩下的字符补齐, 假如有多个匹配则会打印出来 这就是著名的命令

补齐(其实windows中也有文件名补齐功能) vi 中有许多的字符串补齐命令, 非常方便

c-p(c-n) 在编辑模式中, 输入几个字符后再输入此命令则 vi 开始向上(下)搜

索开头与其匹配的单词并补齐, 不断输入此命令则循环查找 此命令

会在所有在这个 vim 程序中打开的文件中进行匹配

c-x-l 在编辑模式中, 此命令快速补齐整行内容, 但是仅在本窗口中出现的

文档中进行匹配

c-x-f 在编辑模式中, 这个命令表示补齐文件名 如输入:

/usr/local/tom 后再输入此命令则它会自动匹配出:

/usr/local/tomcat/

abbr 即缩写 这是一个宏操作, 可以在编辑模式中用一个缩写代替另一个

字符串 比如编写java文件的常常输入 Systemoutprintln, 这很

是麻烦, 所以应该用缩写来减少敲字 可以这么做:

:abbr sprt Systemoutprintln

以后在输入sprt后再输入其他非字母符号, 它就会自动扩展为System

outprintln

替换

替换是 vi 的强项, 因为可以用正规表达式来匹配字符串以下提供几个例子

:s/aa/bb/g 将光标所在行出现的所有包含 aa 的字符串中的 aa 替换为 bb

:s/\<aa\>/bb/g 将光标所在行出现的所有 aa 替换为 bb, 仅替换 aa 这个单词

:%s/aa/bb/g 将文档中出现的所有包含 aa 的字符串中的 aa 替换为 bb

:12,23s/aa/bb/g 将从12行到23行中出现的所有包含 aa 的字符串中的 aa 替换为 bb

:12,23s/^/#/ 将从12行到23行的行首加入 # 字符

:%s= *$== 将所有行尾多余的空格删除

:g/^\s*$/d 将所有不包含字符(空格也不包含)的空行删除

多文件查找替换

查找命令

vimgrep

vimgrep是vim自带的一个工具,类似于grep的用法就可以实现。语法如下:

:vimgrep /{pattern}/[g][j] {file} ...

简单来讲,就是在路径和文件命符合{file}的所有文件中,查找符合{pattern}的字符串.(查找的结果可以用:copen命令打开quickfix列表查看).
没有参数g的话,则行只查找一次关键字.反之会查找所有的关键字.
没有参数j的话,查找后,VIM会跳转至第一个关键字所在的文件.反之,只更新结果列表(quickfix).

比如要在当前目录查找word,使用如下:

:vimgrep word *

如果想要递归查找所有下级目录里面,那么就用: :vimgrep word **

再举一些其他的例子

:vimgrep /the menu/ *.php

表示在当前目录下的扩展名为php的所有文件中,查找字符串"the menu".
:vimgrep /the menu/ ./includes/*.*
表示在当前目录中的"includes"目录里的所有文件中,查找字符串"the menu".

:vimgrep /the menu/ **/*.*

在当前目录及其子目录

里的所有文件中,查找字符串"the menu".

查找的结果可以用":copen"命令查看,在列表里,将光标移动至相应的位置,按回车就打开对应的文件了.

注:

:copen 打开quickfix

:cclose 关闭quickfix

:cc 转到当前查找到的位置

:cn 转到下一个位置

:cp 转到前一个位置

另外,如果想要在使用是快捷查找当前光标下的字母,则只需要在vimrc中添加如下代码:

"对搜索的设置
map ft :call Search_Word()<CR>:copen<CR>
function Search_Word()
let w = expand("<cword>") " 在当前光标位置抓词
execute "vimgrep " w " *"endfunction

替换:

args

举例说明一下

如果你想将当前目录下所有类型的文件中的 oldword 替换为 newword,那么只需要打开当前目录下的某个文件,输入如下两条命令并回车:

:args *.*:argdo %s/oldword/newword/egc | update

接下来的工作就是确认Vim查找到的那个关键词是否要被替换。是则按下 y ,否则按下 n。

解释下所用到的命令:

第一行,我们使用 args 命令,将当前目录下所有类型的文件都加入到参数列表中(不包括子文件夹中的文件,),以备后续操作。args命令我还没完全搞清楚。实验了下,使用 :args */* 的话,是将当前目录下 所有在子文件夹中的目录和子文件夹中的文件(不包括下一级文件)加入参数列表中。了解了这点,你也可以只替换需要的类型,如 :args *.html。举一反三,反不出来的,再去Google。
第二行,使用 argdo 命令,对参数列表中的文件进行替换操作。s 就是替换命令了,加上 % 指对所有行,即全文匹配。g 指对每一行中所有匹配的地方都执行替换,e 指使用正则模式,为了区分大小写。最后的 c 指每次替换前,都要确认一下。
上面的命令是直接操作文件,即存盘了的。操作失误?那就只能狂按 u 了,如果没有备份的话。

分屏

分屏启动Vim
vim -On file1 file2 …——使用大写的O参数来垂直分屏。
vim -on file1 file2 …——使用小写的o参数来水平分屏。
注释: n是数字,表示分成几个屏。

关闭分屏
Ctrl+W c ——关闭当前窗口。
Ctrl+W q ——关闭当前窗口,如果只剩最后一个了,则退出Vim。

分屏
Ctrl+W s ——上下分割当前打开的文件。
:sp filename ——上下分割,并打开一个新的文件。
Ctrl+W v ——左右分割当前打开的文件。
:vsp filename ——左右分割,并打开一个新的文件。

移动光标
Vi中的光标键是h, j, k, l,要在各个屏间切换,只需要先按一下Ctrl+W
Ctrl+W+l ——把光标移到右边的屏。
Ctrl+W+h ——把光标移到左边的屏中。
Ctrl+W+k ——把光标移到上边的屏中。
Ctrl+W+j ——把光标移到下边的屏中。
Ctrl+W+w ——把光标移到下一个的屏中。

屏幕尺寸
下面是改变尺寸的一些操作,主要是高度,对于宽度你可以使用Ctrl+W <或是>,但这可能需要最新的版本才支持。
Ctrl+W = 让所有的屏都有一样的高度。
Ctrl+W + 增加高度。
Ctrl+W - 减少高度。

多标签切换

使用
:tabe
命令和文件名参数,可以在新标签页中打开指定的文件。也可以使用
:tabnew
命令,在新标签页中编辑新的文件。命令
:tab split
将在新标签页中,打开当前缓冲区中的文件。

命令
:tabf
允许你在当前目录搜索文件,并在新标签页中打开。比如我想打开当前目录下的img.txt文件,那么就可以使用
:tabf img.*
命令。请注意,此命令只能打开一个文件,如果搜索出多个匹配文件,将提示你“文件名过多”,这时你需要给出更精确的搜索条件以打开文件。

Vim默认最多只能打开10个标签页。你可以用
set tabpagemax=15
改变这个限制。

列示标签页

命令
:tabs
可以显示已打开标签页的列表,并用“>”标识出当前页面,用“+”标识出已更改的页面。

关闭标签页

命令
:tabc
可以关闭当前标签页。而命令
:tabo
将关闭所有的标签页。

切换标签页

命令
:tabn
gt
可以移动到下一个标签页。而命令
:tabp
gT
将移动到上一个标签页。如果已经到达最后面或最前面的标签页,将会自动转向循环。

如果你打开了很多标签页,那么可以使用
:tabfirst
:tabr
命令,移动到第一个标签页。使用
:tablast
命令,移动到最后一个标签页。

移动标签页

如果你希望按照指定的次序排列标签页,那么你可以使用
:tabm
命令。请注意,标签页次序是从0开始计数的。比如命令
:tabm 1
将把当前标签页移动到第2的位置。如果你没有为
:tabm
命令指定参数,那么当前标签页将会被移动到最后。

配置标签页

默认情况下,只有用户新建了标签页才会在窗口上方显示标签栏,这是由选项
set showtabline=1
决定的。如果我们希望总是显示标签栏,那么可以用
set showtabline=2
命令来设置。如果我们希望完全不显示标签栏,那么可以使用
set showtabline=0
来设置。

多标签页命令

使用
:tabdo
命令,我们可以同时在多个标签页中执行命令。比如我们打开了多个标签页,需要把这些文件中的“food”都替换成“drink”,那么就可以使用
:tabdo %s/food/drink/g
命令,一次完成对所有文件的替换操作,而不用针对每个文件重复操作。

图形界面

如果你使用的是带有图形界面的gVim,那么新建、关闭和打开标签页的操作,都可以通过在标签页上右击鼠标完成。只需要点击相应标签,就可以在不同的标签页间切换。

通过
:help tab-page-intro
命令,可以获得关于标签页使用的更多信息。

命令小结
:tabnew
新建标签页
:tabs
显示已打开标签页的列表
:tabc
关闭当前标签页
:tabn
移动到下一个标签页
:tabp
移动到上一个标签页
:tabfirst
移动到第一个标签页
:tablast
移动到最后一个标签页

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: