图解VIM常用操作

入职差不多3周多了。接触了很多之前在学校接触不到的人,工具。这3周以来,我就好像是那“进了大观园的刘姥姥”,看什么都觉得新奇。

尤其是看到组内大佬们都不用IDE,要么VIM,要么EMACS。而且用的真的很溜,让我佩服之极。今天趁着周六,我也来总结一下这几天我学到的关于vim的一些操作吧。

都说VIM的门槛很高,我想有可能是没找到合适的办法吧。通常用苍白的语言去陈述,效果确实不好,但是加上一个生动的gif图,配合着讲解,这样就事半功倍了。 由于Mac上我没找到合适的GIF图制作工具,就还是在Windows上用LICEcap好了。

行首、行尾

  • Shift + 6 即^: 到行首去;
  • Shift + 4 即$: 到行尾去;

文首、文末

对于小文件而言,使用方向键来到达文首文尾,都不是一个很“耗时”的操作,但是如果一个文件特大呢?先不说几个G的日志文件吧,尝试一下一个1000+行代码的文件,从文首到文尾,仅仅用方向键的↓来控制的话,需要浪费多少时间呢。

  • gg: 到文首
  • Shift + g: 到文尾

删除

有时候我们需要一下删除一行,有时候需要删除很多行。

可以使用如下命令:

  • dd: 删除光标所在行
  • Ndd dNd: 从光标所在行往下数N行,然后进行删除。

下面的操作是:dd , u 2dd, d2d

撤销、反撤销

谁都不能一遍就把代码写好,而且不用再进行修改。所以撤销操作和反撤销操作有时候会非常有效。

  • u: 按照操作时间依次撤销操作栈中的操作。
  • ctrl+r: 反撤销刚才的撤销操作
  • U: 撤销对当前行的修改(用的很少)。

下面的操作顺序为: a ,输入一些字符,u, Ctrl+r

查找

相比于其他IDE环境,VIM的查找操作看起来不是那么厉害,但是经过ctags, cscope等组合,也是可以达到类似的效果的。

  • /string: 在文本中向下查找string
  • ?string: 在文本中向上查找string
  • Shift+*: 将光标定位到string上
    接下来的操作顺序为: /find, enter,n(跳到下一个匹配项),?input,enter,n(跳到下一个匹配项)

注意: n 意思是跳到下一个匹配项;N则是跳到上一个匹配项。

高亮查找

刚才的查找操作中,想必已经看到,查找的时候文本中符合匹配规则的单词被高亮显示了。要做到这样的显示可以再.vimrc中进行配置。对于.vimrc的配置,这里我还是得多啰嗦一句。

~/.vimrc 代表的是/root/.vimrc 修改这个路径下的.vimrc文件仅仅会对root用户有效。
/etc/vim/.vimrc 路径下的.vimrc被修改的话,则会对登录到Linux上的所有用户有效。

配置内容为:

set hlsearch  " 高亮查找项
set incsearch " 查找跟随
set ignorecase smartcase " 查找时忽略大小写,但是string包含有一个大写字母时,则按照string真实拼写进行匹配

上翻、下翻

有时候我们不想一下子跳到文首,或者文尾。而是想大致浏览下文件中到底有什么内容。这个时候上翻,下翻就起到作用了。

  • Ctrl+u: 上翻一页,即upward
  • Ctrl+b: 上翻一页,没找到合适的记忆词汇
  • Ctrl+d: 下翻一页,即downward
  • Ctrl+f: 下翻一页,也没找到合适的助记词

就使用而言,没必要全记住这些操作。相较而言,u和d言简意赅,记住这俩足够了。

复制,黏贴

在写代码的时候,复制粘贴是离不开的了。在VIM中,复制粘贴的命令也很简单。

  • yy: 复制光标所在行内容
  • Nyy 或者 yNy: 从光标所在行起,复制N行。
  • :put 或者:P: 在光标所在行起,开始粘贴。p代表向下粘贴,P代表向上粘贴。

需要注意的是:复制粘贴命令仅对当前vim编辑窗口中的内容有效。如果想粘贴系统剪切板中的内容,还是需要设置一下。具体的可以自行搜索一下:-)。

接下来的操作顺序: 先4yy 再:put

复制多行

复制多行内容在IDE中只需要用鼠标右键选中,再Ctrl+c就行了。但是在VIM中,就得用几个命令进行组合一下,来实现相同的功能。

具体组合为:
- v: 进入VISUAL模式,然后用方向键移动光标。
- y: 复制选中的文本内容。
- d: 剪切选中的文本内容。
- p: 粘贴经由y复制到的文本内容到光标所在位置。

操作内容为: 选中多行,复制,粘贴。剪切,粘贴

  • yG: 从光标所在行起,复制到文档尾部。

在此基础上可以组合出很实用的操作。如下:

  • esc dG: 全部删除:按esc后,然后dG
  • esc ggyG: 全部复制:按esc后,然后ggyG
  • esc ggvG: 全选高亮显示:按esc后,然后ggvG或者ggVG

注释 与 撤销注释

对于单行的注释与撤销注释比较简单。先定位到行首,在选择插入模式,进行注释或者删除注释就行了。具体的组合命令为:

拿注释举例:

^  i  //(或者其他语言的注释符号)

但是通常情况下我们会遭遇要进行多行注释,撤销多行注释的情况。这个时候就不能一点点的操作了,否则要多浪费时间啊。

具体组合内容为:
- Ctrl + v: 进入VISUAL BLOCK 模式
- Shift + i: 进入行首插入模式
- 输入注释符号: 开始注释
- 按两次esc: 完成注释

接下来通过一张图来具体展示如何操作。

下面是相对的操作,取消多行注释。具体的组合命令如下:

  • ctrl + v: 进入VISUAL BLOCK模式,选择要取消注释的部分。
  • d: 取消注释。

函数体

函数体的操作其实要配合折叠来实现。这里就先不配置折叠项了,单纯的来操作一下跳转到函数体开头和结束的内容吧。

  • {: 跳到函数体开始处,注意针对于本文件内定义的函数。
  • }: 跳到本文件内定义的函数体的结尾处。


下面的这俩需要ctags的支持,所以暂不进行描述。
- ctrl + ]:
- ctrl + t:

总结

关于VIM的常见的操作,仅仅知道这些还远远不够。但是日常的对于日常开发也算是勉勉强强的能用了吧。除此之外,对一个码农的办公来说:

ctags + cscope + vim + tmux, 这四个一个都不能少!

以后在工作中肯定还会遇到更加经典的组合,到时候再来补充吧。

时间: 2024-09-22 17:24:22

图解VIM常用操作的相关文章

Javascript数组Array的常用操作

文章简介:JavaScript中的数组. Array是JavaScript中常用的类型,并且JavaScript中的数组和其他语言的数组有比较大的区别.JavaScript中数组中存放的数据类型不一定相同,而且数组的长度也是可改变的. 下面记录一下Array的常用操作: 一 新建数组 新建数组可以用一下方法: var obj = ['zdy',22,'湖北武汉','计算机科学与技术'];//创建一个数组变量 var obj1 = new Array('zdy',22,'湖北武汉','计算机科学与

WIN98注册表编辑器的常用操作

注册表 WIN98注册表编辑器的常用操作注册表编辑器是一个可以让你改变系统注册设定的高级工具,有经验的Windows用户可以通过编辑注册表改变系统设定. 启动注册表编辑器的方法是执行Windows文件夹下的REGEDIT.EXE.如果注册表中有错误,计算机可能不能正常运行.如果发生这种情况,可以将注册表信息恢复到上次启动计算机时的状态.下面详细介绍Win98注册表编辑器常用的操作. 一.恢复注册表 1.单击"开始",再单击"关闭系统": 2.单击"重新启动

C#中对DatagridView的部分常用操作

C#中对DatagridView部分常用操作 只列出技巧部分,后面会有补充 0(最基本的技巧). 获取某列中的某行(某单元格)中的内容 this.currentposition = this.dataGridView1.BindingContext [this.dataGridView1.DataSource, this.dataGridView1.DataMember].Position; bookContent = this.database.dataSet.Tables[0].Rows [

python中list常用操作实例详解

  本文实例讲述了python中list常用操作.分享给大家供大家参考.具体分析如下: 1.定义list ? 1 2 3 4 5 6 7 >>> li = ["a", "b", "mpilgrim", "z", "example"] >>> li ['a', 'b', 'mpilgrim', 'z', 'example'] >>> li[0] 'a' &

MongoDB在PHP中的常用操作小结

  本篇文章主要是对MongoDB在PHP中的常用操作进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 $mongodb = new Mongo(); //$connection = new Mongo( "$dburl:$port" ); // connect to a remote host (default port) $mydb = $mongodb->mydb; //隐性创建数据库mydb $mydb = $mongodb->selectDB(&

php中的mongodb select常用操作代码示例_php实例

前面说到了mongodb安装,配置,集群,以及php的插入与更新等,请参考:mongodb. 下面说一下,mongodb select的常用操作 测试数据: 复制代码 代码如下: { "_id" : 1, "title" : "红楼梦", "auther" : "曹雪芹", "typeColumn" : "test", "money" : 80,

javascript Range对象跨浏览器常用操作第1/2页_javascript技巧

开发的功能主要涉及即时代码着色(CodeColoring)和语法提示(CodeHints)功能,稍后会总结功能开发中问题或提供源码. 以下是个人对Range对象的了解和常用操作的实例和总结: Range对象 Range对象表示文档的连续范围区域,如用户在浏览器窗口中用鼠标拖动选中的区域. dom标准Range对象 http://www.w3school.com.cn/xmldom/dom_range.asp 在ie中使用TextRange对象 http://www.hbcms.com/main/

R语言Data Frame数据框常用操作

Data Frame一般被翻译为数据框,感觉就像是R中的表,由行和列组成,与Matrix不同的是,每个列可以是不同的数据类型,而Matrix是必须相同的. Data Frame每一列有列名,每一行也可以指定行名.如果不指定行名,那么就是从1开始自增的Sequence来标识每一行. 初始化 使用data.frame函数就可以初始化一个Data Frame.比如我们要初始化一个student的Data Frame其中包含ID和Name还有Gender以及Birthdate,那么代码为: studen

JQuery 常用操作代码_jquery

//遍历option和添加.移除option function changeShipMethod(shipping){ var len = $("select[@name=ISHIPTYPE] option").length if(shipping.value != "CA"){ $("select[@name=ISHIPTYPE] option").each(function(){ if($(this).val() == 111){ $(thi