Vim 编辑器能做什么
图形化的编辑器用得好好的,为什么要学习使用 Vim?
原因是:一、无图形界面可用。因为 Linux 服务器为了节省内存,提高效率等原因,基本上不安装图形界面,在服务器上编辑脚本,Vim 是最好的选择。二、Vim 能让我们专注于工作上,尽量排除与编辑无关的事。三、Vim 是一个高效的编辑器,高效包含两层意思:Vim 打开或关闭非常快(秒开);编辑者本人能高效操作,让我们双手不离开键盘的情形下,完成与编辑文档或写代码所有的相关操作(忘记你的鼠标吧,一只手在键盘与鼠标之间移动是一种浪费,某些情况下会打断思维)。
本文假设读者完全没有 Vim 操作的经验,但是有其他编辑器使用的经验,“其他编辑器”包括但不限于:Windows 记事本, Notepad++, 微软的 Visual Studio 系列等等。本文不会涉及 Vim 的安装,实际上 Vim 在 Windows、Linux、Unix、Mac 上都是可用的。Vim 的官网:https://www.vim.org/。
首先看看编辑一份文档或写代码有哪些需求:
1. 定位:能自由的定位光标到当前文档任何位置,包括文档开头、结尾或任意位置(无论是否在屏幕上可见);定位到屏幕上可见的第一行、最后一行、中间行;定位到单词的开头、结尾、单词中任意字母的位置;定位到句子或段落的开头、结尾、函数或引用的开头、结尾等等(无论是否在屏幕上可见)。
另一种定位是:如果你当前光标的单词是一个文件名,例如 #include <string> ,光标位于 string 单词上,按下 gf 可以直接打开 string 文件!
2. 编辑:复制、剪切、删除、粘贴、替换等基本操作,这些操作除了针对单独的字母,还可以针对文本对象。文本对象可以是单词、句子、段落、[]{}()<> 这些括号括起来的文本、单引号或双引号中的文本、被选中的文本、被标记的文本等等。还有无限制的撤消或重做(上一次的)操作。
3. 查找替换:极其方便的查找替换操作,可以使用正则表达式。同时针对多份文档进行查找替换。
4. 同时编辑多份文档:在纯文本模式下的多窗口、多个缓冲区、多标签等等。
5. 选择:可以按行、列等方式选择文本,同时编辑多行文本等等。选择操作可以与编辑和定位操作接合起来使用。定位、编辑、查找、选择等等操作都可以串起来,让你随心所欲的控制自己的文档。这些所有的操作都是在无鼠标的情况下,只按一个字母键或少数几个组合字母键完成的!
6. 表格编辑:在虚拟空间中方便的编辑二维表格。
7. 宏:把以上所有的操作录制成一个宏,全自动化的操作,或自动重复任意次数。
8. 其他操作:增加或减少缩进、合并行、字母大小写转换、全自动重新排版、自动补齐等等。
9. 自定义:在 .vimrc 文件中自定义各种操作环境,按自己的方式控制屏幕或键盘等等操作环境。
10. 插件:Vim 有非常多的插件让我们高效的操作,但是不建议把大量时间浪费在插件的选择上,毕竟我们最重要的是工作本身,而不是插件的测试。
Vim 能完美的做到上面的所有。所以,广大程序猿朋友建议抽点时间出来学学 Vim。
下面分享一下在 .vimrc 中几个与括号相关的自动补齐快捷键设置:
1. () 小括号:在输入有参数的函数时,我们希望右边的小括号能自动补齐,同时在输入无参数的函数时,不希望自动补齐。加上下面两行即可:
当我们想输入 int main(int argc, char **argv) 时,输入到左边第一个括号,后面的字母 i 输入时,第二个括号会自动补上,无需输入。当我们输入 auto size = vec.size(); 时,会很自然的输入两个括号接着输入后面的其他字符(例如分号)。后面的第二个半边括号不要自动输入,避免自动补齐再去删除后面多余的半边括号,这样就不会打断思维。
2. [] 中括号:中括号也按照上面的方式设置:
3. <>尖括号:在 C++ 中,尖括号有四种含义,其一是模板,例如 vector<int>;其二是小于号,输入时会习惯性的在后面加一个空格,例如 if ( i < 10 );其三是左移位或向 cout 输出,例如 std::cout << i << "\n";其四是模板特例化,例如 template <> int comp( ... )。针对前面四种输入情形,分别设置如下:
快捷键设置有一个原则,就是不要打断自己的正常思维。所以上面的四种设置是一个整体,缺一不可,因为第一个输入的字符是 < 号,四种定义是相互影响的。设置这种成对的括号,无论如何,最后一种是必不可少的,因为我们经常很自然的输入 <>,后面不能再自动补一个 > 来干扰自己的思维。
4. {} 大括号:在 C++ 中,大括号有三种含义,其一是作用域,例如函数;其二是列表初始化,一般在输入左边的括号后会跟一个空格;其三就是单独的 {} 了。设置如下,这三行设置是一个整体,缺一不可:
一般我们输入作用域的时候,大括号会单独占一行(左边的大括号可能不会单独占一行),接下来的代码会有一个缩进,然后开始输入后面的字符,类似如下图的格式。所以在输入第一个 { 的时候,光标要求自然的到达下一行缩进的位置,然后开始输入后面的代码,并且大括号要求成对自动补齐。在这里,我们只要输入 { 然后自然的输入字母 i ,后面的格式和 } 全部自动补齐了。
5. 双引号和单引号:双引号和单引号比较特殊,虽然有的地方要求成对出现,但是大多数时候也有单独的输入,因此各设置一个快捷输入就可以了,如下:
下面是我其中一个非常简单的 .vimrc 设置文件,其中 execute pathogen#infect() 和 let NERDTreeQuitOnOpen=1 两行与插件相关,如果你没有相关的插件,就删除这两行吧: