前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >常用的vim命令总结

常用的vim命令总结

作者头像
杨永贞
发布2020-08-04 17:11:51
1.6K0
发布2020-08-04 17:11:51
举报

vim就不多介绍了,很好用很强大。在windows下可以用gvim,配置一下_vimrc文件,再配合cscope和ctag等工具,就是一个功能强大的IDE。

常用的命令在这里总结下,以后忘了可以看看,部分摘自网络轻快的VIM和部分网摘。

首先记着它的三种模式,命令模式,插入模式,可视模式。

常用的命令:分类一下,无非是编辑相关的,移动,复制,粘贴,插入,删除等操作。

窗口相关的,多窗口,窗口分割和tab标签。

命令执行相关的以及配合cscope和ctag函数间查找和跳转的。

执行外部命令的,!make,find等等。。。

Vim的quickfix模式等等,可以方便的定位到编译的错误处。。

先来张截图:

首先是移动,

进入vim后键入: '0 即回到当初你编辑的位置 PS: 如果想把光标停止在指定的行, 这样 vim +n urfile // n为行号 如果要停留在行尾, 这样 vim + urfile 整行移动 0 移动到行首 $ 移动到行末 + 移动到下一行开头 - 移动到上一行开头 这里需要注意的是+ -和上面的j k有什么不同之处 j k也是移动到上一行和下一行,但它们移动的是光标所在的位置 + -不管你的光标在何处,总是移动到下一行或上一行的行首 单词移动 W w 移动到下一个单词开头 E e 移动到下一个单词结尾 B b 倒退到上一个单词开头 需要注意的是,E会忽略标点符号,如:I‘m,e会当成两个单词,E则不会 同样,在命令前加上数字代表执行次数,如:2w,表示往下移动2个单词

Ctrl+f 往前滚动一整屏 Ctrl+b 往后滚动一整屏 Ctrl+d 往前滚动半屏 Ctrl+u 往后滚动半屏 Ctrl+e 往后滚动一行 Ctrl+y 往前滚动一行 看似比较多,但是可以根据键盘的位置来进行记忆,并且下面两个也不常用 上面的滚屏都有一个共同点,就是会改变光标的位置,且屏幕也在改变 如果想让光标维持在原来的位置实现滚屏请看下面 用z调整光标 z<Enter> 将光标所在行移动到屏幕顶端 z. 将光标所在行移动到屏幕中间 z- 将光标所在行移动到屏幕低端 tips:980z<Enter>可以将第980行移动到屏幕顶端 好吧,有时候你其实不想滚屏,你只想在当前屏幕中移动 请往下看 在屏幕中移动 H 移动到屏幕顶端的行 M 移动到屏幕中央的行 L 移动到屏幕底端的行 nH 移动到屏幕顶端往下的第n行 nL 移动到屏幕顶端往上的第n行 据我猜测这三个字母应该是HIgh、Middle和Low的缩写,其实挺好记的 多练习几遍就行了,需要注意的是:这里只是光标的位置变化,和上面两种不同 tips:你可以用+ -和j k实现同样的位置变化,只不过要操作多次而已 + -和j k的区别忘了吗?往上看看吧 在当前行移动 ^ 移动到当前行的第一个非空格处 n| 移动到当前行的第n列 这里的^与上面的0通常情况下表示的位置是一样的 而n|,个人感觉还没有h l方便,慢慢的数出行数还不如直接按着h l 左右移 根据文本块移动 所谓的文本块也就是句子、段落、小节等 ( 移动到当前句子开头 ) 移动到下一个句子开头 { 移动到当前这一段开头 } 移动到下一段开头 [[ 移动到当前这一节的开头 ]] 移动到下一节的开头 其中,VIM以? . !等符号来标记一个句子 空白行来标记一个段落 用节宏来标记一个节(节宏是什么我还没搞清楚) 根据行号来移动 Ctrl+g 显示当前行信息 nG 转至第n行 G 转至文本末尾 gg         移至文本开头 如果你不知道当前是多少行的话就可以用Ctrl+g来查看 如果想转到第800行,可以用800G 其实z命令也可以做到,并且把光标移动到第一行 tips:``反引号可以返回到使用G之前的位置

fx:移动光标到当前行的下一个 x 处。很明显,x 可以是任意一个字母,而且你可以使用 ; 来重复你的上一个 f 命令。

tx:和上面的命令类似,但是是移动到 x 的左边一个位置。(这真的很有用)

Fx:和 fx 类似,不过是往回找。使用 , 来重复上一个F命令。

Tx:和 tx 类似,不过是往回移动到 x 的右边一个位置。

b:光标往前移动一个词。

w:光标往后移动一个词。

0:移动光标到当前行首。(是数字0)

^:移动光标到当前行的第一个字母位置。

*:读取光标处的字符串,并且移动光标到它再次出现的地方。

#:和上面的类似,但是是往反方向寻找。

/text:从当前光标处开始搜索字符串 text,并且到达 text 出现的地方。必须使用回车来开始这个搜索命令。如果想重复上次的搜索的话,按 n移动到下个 text 处,N 移动到上一个 text 处 。

?text:和上面类似,但是是反方向。

m{a-z}:在当前光标的位置标记一个书签,名字为 a-z 的单个字母。书签名只能是小写字母。你看不见书签的存在,但它确实已经在那里了。

`a:到书签 a 处。注意这个不是单引号,它一般位于大部分键盘的 1 的左边。

`.:到你上次编辑文件的地方。这个命令很有用,而且你不用自己去标记它。

%:在成对的括号等符号间移动,比如成对的 [ ] , { }, ( ) 之间。将光标放到任意符号上,然后通过 % 来移动到和这个符号匹配的符号上,% 还可以正确的识别括号的嵌套层数,总是移动到真正匹配的位置上。因此这个命令在编辑程序代码的时候非常有用,可以让你方便的在一段代码的头尾间移动。

上一节我们讲到了VIM中的移动,既然已经能够在屏幕和光标间游刃有余了

从光标修改到本行末尾 C 功能同上 c0 从光标修改到本行开头 cc 删除整行从头修改 S 功能同上 s 删除光标所在位置的字符,然后插入 这里有点难记,主要是多练习才能看到效果 其中,c和C功能是一样的,都是从光标修改到行尾,d+a达到相同效果 c0和d0+i效果一样,区别是少输入一次 cc和S效果也是一样,其实S是属于插入的范畴,这里类似,所以一起讲了 再来是s,它会删除光标处的字符再插入,效果等同于x+i或c+space 多行修改我想就不用说了,前面加上数字再组合命令就可以了 从上面看来,我们应该可以更深刻的认识到,VIM中大部分命令是组合使用的 利用好了这点才能更快的摸索出自己的使用习惯,从而高效修改 操作相同文本的时候复制尤其有效,在Windows中我们都习惯了先用鼠标选择文本 而Vim下则不用那么麻烦,你甚至可以使用可视模式操作,但这里先略过 我在这一节主要说说命令模式下的复制 在讲复制之前我要先说一个简单到不行的命令 粘帖 p 粘帖 复制的形式可以很多,但是粘帖的形式却没多少 无非就是加数字达到多次粘帖什么的 其实准确的说,p应该是放置的意思 不过我也搞不清是paste还是put的缩写 单词和字符复制 ynl 向右复制n个字符 ynh 向左复制n个字符 ynw 向前复制n个单词 ynb 向后复制n个单词 由于复制操作通常是在量比较大的情况下进行 所以这里我使用了n代替需要操作的个数 需要说明的是,这里看起来并没有多大意义 因为复杂字符和单词还没有直接插入的方式来的快 行复制 y0 复制到行首 y

现在我们知道错在哪儿了,修正一下,然后使用":cn"命令(或者在Quickfix List对应行上输入回车)跳到下一个出错的地方,以此类推,直到修正全部错误。 好了,千辛万苦,我们的hello world终于工作了。乍一看这个例子,似乎Quickfix并没有提高什么效率,但如果你的错误出现在多个不同目录的不同文件里,它可以帮你省很多时间,使你可以集中精力在修正bug上。 vim可以同时记住最新的10个错误列表,也就是说你最近10次使用":make"命令编译所遇到的错误都保存着,可以使用":colder"和":cnewer"命令,回到旧的错误列表,或者到更新的错误列表。 在quickfix模式里经常用到的命令有: :cc 显示详细错误信息 ( :help :cc ) :cp 跳到上一个错误 ( :help :cp ) :cn 跳到下一个错误 ( :help :cn ) :cl 列出所有错误 ( :help :cl ) :cw 如果有错误列表,则打开quickfix窗口 ( :help :cw ) :col 到前一个旧的错误列表 ( :help :col ) :cnew 到后一个较新的错误列表 ( :help :cnew ) 更多的命令,以及这些命令更详细的解释,请参见手册。 对于经常用到的命令,最好提供更方便的使用方法,在我的vimrc中的定义: autocmd FileType c,cpp map <buffer> <leader><space> :w<cr>:make<cr> nmap <leader>cn :cn<cr> nmap <leader>cp :cp<cr> nmap <leader>cw :cw 10<cr> 现在使用",<space>"(先按,再按空格)就可以编译,使用",cp"和",cn"跳到上一个和下一个错误,使用",cw"来打开一个quickfix窗口。这下顺手多了! 如果你希望跳转到出错的文件时,使用一个分隔的窗口打开,请参阅'switchbuf'选项的值。 在vim7中,每个窗口都可以拥有自己的位置列表,这样,你就能够同时打开多个位置列表了,而quickfix列表在整个vim中只有一个。你可以使用位置列表来显示编译错误信息,具体命令参阅手册:":help location-list"以及":help :lmake"。 结合文章http://dongpingli.blogspot.com/2009/03/makefile_27.html编写的通用makefile,这下在写新程序时,直接copy makefile到程序目录,在vim里面写完程序后直接make,然后查错修改在一个tab下,省得来回tab切换,效率会提高不少。 http://www.cnblogs.com/lidp/articles/1696053.html

vim的taglist的确很好用.

http://hi.baidu.com/tjuer/item/638a9bb045a32197194697b0

http://www.cnblogs.com/mo-beifeng/archive/2011/11/22/2259356.html

今天发现在vim中浏览代码不太方便, 每次总是需要搜索函数名。只好去试试传说中的taglist插件了! 用完后发现,taglist的确不错,很方便. 下面是安装的步骤和简单的使用入门介绍. 1> taglist的安装. 推荐文章: (按照上面的步骤一步一步走就行了) http://vim-taglist.sourceforge.net/installation.html http://www.vim.org/scripts/script.php?script_id=273 (含官方下载地址) 2> 简单配置和上手入门 为了使用方便,建议修改一些设置选项. (在.vimrc中设置) 常见的设置有: ★ let Tlist_Show_One_File = 1 "不同时显示多个文件的tag,只显示当前文件的 ★ let Tlist_Exit_OnlyWindow = 1 "如果taglist窗口是最后一个窗口,则退出vim ★ let Tlist_Use_Right_Window = 1 "在右侧窗口中显示taglist窗口 下面介绍常用的taglist配置选项,你可以根据自己的习惯进行配置:

- Tlist_Ctags_Cmd选项用于指定你的Exuberant ctags程序的位置,如果它没在你PATH变量所定义的路径中,需要使用此选项设置一下;

- 如果你不想同时显示多个文件中的tag,设置Tlist_Show_One_File为1。缺省为显示多个文件中的tag;

- 设置Tlist_Sort_Type为”name”可以使taglist以tag名字进行排序,缺省是按tag在文件中出现的顺序进行排序。按tag出现的范围(即所属的namespace或class)排序,已经加入taglist的TODO List,但尚未支持;

- 如果你在想taglist窗口是最后一个窗口时退出VIM,设置Tlist_Exit_OnlyWindow为1;(very useful ~~~)

- 如果你想taglist窗口出现在右侧,设置Tlist_Use_Right_Window为1。缺省显示在左侧。

- 在gvim中,如果你想显示taglist菜单,设置Tlist_Show_Menu为1。你可以使用Tlist_Max_Submenu_Items和Tlist_Max_Tag_Length来控制菜单条目数和所显示tag名字的长度;

- 缺省情况下,在双击一个tag时,才会跳到该tag定义的位置,如果你想单击tag就跳转,设置Tlist_Use_SingleClick为1;

- 如果你想在启动VIM后,自动打开taglist窗口,设置Tlist_Auto_Open为1;

- 如果你希望在选择了tag后自动关闭taglist窗口,设置Tlist_Close_On_Select为1;(这个应该比较方便,好用)

- 当同时显示多个文件中的tag时,设置Tlist_File_Fold_Auto_Close为1,可使taglist只显示当前文件tag,其它文件的tag都被折叠起来。(这个也不错! )

- 在使用:TlistToggle打开taglist窗口时,如果希望输入焦点在taglist窗口中,设置Tlist_GainFocus_On_ToggleOpen为1;(useful~~)

- 如果希望taglist始终解析文件中的tag,不管taglist窗口有没有打开,设置Tlist_Process_File_Always为1;

- Tlist_WinHeight和Tlist_WinWidth可以设置taglist窗口的高度和宽度。Tlist_Use_Horiz_Window为1设置taglist窗口横向显示;

在taglist窗口中,可以使用下面的快捷键:

<CR> 跳到光标下tag所定义的位置,用鼠标双击此tag功能也一样 o 在一个新打开的窗口中显示光标下tag <Space> 显示光标下tag的原型定义 u 更新taglist窗口中的tag s 更改排序方式,在按名字排序和按出现顺序排序间切换 x taglist窗口放大和缩小,方便查看较长的tag + 打开一个折叠,同zo - 将tag折叠起来,同zc * 打开所有的折叠,同zR = 将所有tag折叠起来,同zM [[ 跳到前一个文件 ]] 跳到后一个文件 q 关闭taglist窗口 <F1> 显示帮助

可以用“:TlistOpen”打开taglist窗口,用“:TlistClose”关闭taglist窗口。或者使用“:TlistToggle”在打开和关闭间切换。

在我的.vimrc中定义了下面的映射,使用“,tl”键就可以打开/关闭taglist窗口:

map <silent> <leader>tl :TlistToggle<cr>

本文参考http://blog.csdn.net/wooin/archive/2007/10/31/1858917.aspx在此表示感谢。 首先在建立~/.vim,以后所有的插件都存放在此。在.vim下分别建立doc、syntax、plugin三个文件夹分别存放插件帮助文档、语法文件、插件。 1、ctags 软件功能:用于产生一个tags文件(代码索引文件),tags文件中记录的源文件的索引以帮助你快速得找到某个符号的定义。它支持相当多的语言,如C、C++、C#、Shell等等。后面所有的包括函数列表显示,变量定义跳转,自动补全等,都要依赖于它。 ctags的全名叫做“Exuberant Ctags”,可以从新立得里面找到。 可以通过在vim中输入 :!ctags -R 在当前路径下建立一个tags文件,然后就可以在vim中使用跳转功能了。其中的-R选项是递归搜索子目录下的相关符号。所谓跳转就是可以随时转到自己想要的函数、类型、结构体、类等等的定义处。比如光标处于任意位置时可以普通模式下输入 :ta func_name 就可以直接将光标定位到func_name函数处。当然,其他的命名也可以使用这种方法进行快速定位。另外就是可以在光标指向一个函数名时按下Ctrl+],马上跳转到这个函数的定义。在跳转到定义位置之后,可以按下Ctrl+o快速返回原来的编辑位置。 如果tags文件不再当前目录下则用 :set tags=filename 来指定。 PS:ctags是一个程序用于生成tags文件。tags文件是当前目录下所有源文件的标签链接文件。在一个没有ctags的vim中只是无法生成新的tags文件,但是已有的tags文件仍然可以使用。 2、taglist 下载地址:http://www.vim.org/scripts/script.php?script_id=273 在Vim的一个垂直或水平的分割窗口中显示一个文件中定义的tags(函数,类,结构,变量等)。 在.vimrc中加入如下设置:

Java代码

收藏代码
收藏代码
  1. "不同时显示多个文件的tag,只显示当前文件的
  2. let Tlist_Show_One_File=1
  3. "如果taglist窗口是最后一个窗口,则退出vim
  4. let Tlist_Exit_OnlyWindow=1

在vim中用如下命令打开taglist窗口

Java代码

收藏代码
收藏代码
  1. :Tlist

将taglist帮助文件放在~/.vim/doc目录下,如果需要使用:help taglist.txt命令查看帮助文档,需要事先在vim中执行如下命令:

Java代码

收藏代码
收藏代码
  1. :helptags ~/.vim/doc

使用:将光标移动到taglist窗口的tag上面,按回车即可跳转到此tag的定义处,如果只想查看此tag的完整名称表达,按空格。 3、WinManager 下载地址:http://www.vim.org/scripts/script.php?script_id=95 WinManager可以在vim中像taglist一样开一个窗口来浏览工程文件。其实vim自带了文件浏览的插件netrw.vim。只不过WinManager将taglist和netrw整合在了一起。在WinManager界面上可以用下面的一些命令来进行常用的目录和文件操作:

<F1>

显示帮助

<cr>

如果光标下是目录, 则进入该目录; 如果光标下文件, 则打开该文件

-

返回上级目录

c

切换vim 当前工作目录正在浏览的目录

d

创建目录

D

删除目录或文件

i

切换显示方式

R

文件或目录重命名

s

选择排序方式

x

定制浏览方式, 使用你指定的程序打开该文件

在.vimrc中加入如下配置:

Java代码

收藏代码
收藏代码
  1. "设置WinManager与TagList的布局:前者在上,后者在下
  2. let g:winManagerWindowLayout='FileExplorer|TagList'
  3. "映射WinManager快捷键,在normal模式下按wm,控制开启和关闭
  4. nmap wm :WMToggle<CR>

4、MiniBufExplorer 下载地址:http://www.vim.org/scripts/script.php?script_id=159 简单的说就是标签页文件。当vim打开单个文件的时候,MiniBufExplorer没什么作用。当打开两个以上的文件时,MiniBufExplorer会在vim的上面打开一个新的窗口空间,列出了已经打开的文件。把光标放到这个窗口上面时,可以有如下的几个命令使用:

<Tab>

向前循环切换到每个buffer名上

<S-Tab>

向后循环切换到每个buffer名上

<Enter>

在打开光标所在的buffer

d

删除光标所在的buffer

下面的两个功能需要在.vimrc中加入:

Java代码

收藏代码
收藏代码
  1. let g:miniBufExplMapCTabSwitchBufs = 1

<C-Tab>

向前循环切换到每个buffer上,并在但前窗口打开

<C-S-Tab>

向后循环切换到每个buffer上,并在但前窗口打开

如果在.vimrc中设置了下面这句:

Java代码

收藏代码
收藏代码
  1. let g:miniBufExplMapWindowNavVim=1

则可以用<C-h,j,k,l>切换到上下左右的窗口中去,就像: C-w,h j k l 向"左,下,上,右"切换窗口. 在.vimrc中设置:

Java代码

收藏代码
收藏代码
  1. let g:miniBufExplMapWindowNavArrows=1

是用<C-箭头键>切换到上下左右窗口中去. 主要命令: :MiniBufExplorer " Open and/or goto Explorer :CMiniBufExplorer " Close the Explorer if it's open :UMiniBufExplorer " Update Explorer without navigating :TMiniBufExplorer " Toggle the Explorer window open and closed. 5、在工程中查找——Grep 下载地址:http://www.vim.org/scripts/script.php?script_id=311 对光标所在的词来个全工程范围的grep。

:Grep

按照指定的规则在指定的文件中查找

:Rgrep

同上, 但是是递归的grep

:GrepBuffer

在所有打开的缓冲区中查找

:Bgrep

同上

:GrepArgs

在vim的argument filenames (:args)中查找

:Fgrep

运行fgrep

:Rfgrep

运行递归的fgrep

:Egrep

运行egrep

:Regrep

运行递归的egrep

:Agrep

运行agrep

:Ragrep

运行递归的agrep

上面的命令是这样调用的:

:Grep [<grep_options>] [<search_pattern> [<file_name(s)>]]

:Rgrep [<grep_options>] [<search_pattern> [<file_name(s)>]]

:Fgrep [<grep_options>] [<search_pattern> [<file_name(s)>]]

:Rfgrep [<grep_options>] [<search_pattern> [<file_name(s)>]]

:Egrep [<grep_options>] [<search_pattern> [<file_name(s)>]]

:Regrep [<grep_options>] [<search_pattern> [<file_name(s)>]]

:Agrep [<grep_options>] [<search_pattern> [<file_name(s)>]]

:Ragrep [<grep_options>] [<search_pattern> [<file_name(s)>]]

:GrepBuffer [<grep_options>] [<search_pattern>]

:Bgrep [<grep_options>] [<search_pattern>]

:GrepArgs [<grep_options>] [<search_pattern>]

为了简化操作,在.vimrc中加入如下配置:

Java代码

收藏代码
收藏代码
  1. nnoremap <silent> <F3> :Rgrep<CR>

将光标移到需要查找的单词上面,按F3即可。比如查找ABC: 在最下面的命令行会显示: Search for pattern: ABC 此时你还可以编辑该行, grep支持正则表达式。 按下回车后,在最下面的命令行会显示: Search in files: * 是问搜索范围, 默认是该目录下的所有文件, 此时你还可以编辑该行, 比如你只想搜索源码文件: Search in files: *.c *.h 然后在按下回车, 会在弹出的QuickFix窗口中列出所有符合条件的搜索结果, 你可以在其中查找你想要的结果。 6、NERD_commenter——添加注释 下载地址:http://www.vim.org/scripts/script.php?script_id=1218 <leader>cc 添加注释 <leader>cu 取消注释 7、Python代码折叠——python_ifold 下载地址:http://www.vim.org/scripts/script.php?script_id=2002 python_ifold是python_fold的改进版本。 可实现Python代码的折叠。打开Python脚本时会发现所有的代码已经折叠了,其中还现了折叠部分拥有的行数。在折叠的行按下zo可以打开折叠,按下zc会折叠上代码。python_ifold是默认启用的。 8、pydicton——python代码智能补全 下载地址:http://www.vim.org/scripts/script.php?script_id=850 pydiction-1.2中有四个文件,除了帮助文档和插件之外,还有两个分别是:complete-dict和pydiction.py。 其中complete-dict放在~/.vim/tools目录下。pydiction.py是可选文件,官网上的解释是: Python script used to generate the dictionary. You can optionally run this script to add more modules to complete. .vimrc中需要如下配置:

Java代码

收藏代码
收藏代码
  1. autocmd FileType python set complete+=k~/.vim/tools/complete-dict

9、NERD_tree 下载地址:http://www.vim.org/scripts/script.php?script_id=1658 由于WinManager的fileexplorer功能不能自动更新,相比之下NERD_tree就强大许多了。 10、AutoComplPop——自动提示 下载地址:http://www.vim.org/scripts/script.php?script_id=1879 解压之后会有三个文件夹,全部放到.vim目录下。特别是别忘了autoload这个目录下的acp.vim也要放到.vim相应的autoload目录下。 11、vimIM——vim的中文输入插件 下载地址:http://vimim.googlecode.com/svn/vimim/vimim.html ctrl+\ 直接在vim中切换输入法。也可以输入英文,然后ctrl+6,显示中文。 12、auto-pairs——括号自动配对 下载地址:https://github.com/jiangmiao/auto-pairs 13、xml编辑插件——标签自动配对 下载地址:http://www.vim.org/scripts/script.php?script_id=1397 也支持html、xhtml、docbk、xsl等。详见主页说明。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-01-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • vim的taglist的确很好用.
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档