Vim入门教程

 

尽管网上有成打的Vim在线教程,可是要么艰深晦涩,要么太过肤浅。本教程的目标让每一个阶段都有斩获,从理解它的哲学(将和你终身相伴)到超越如今编辑技巧,成为其中的牛人。html

简单来讲,本教程的学习方式将使你终身受益。git

为何选择vim

我相信大多数人可能因为如下三点缘由而使用vim:github

一、vim无所不在。学习vim你无需担忧到了其余平台须要学习新编辑器。编程

二、可扩展性。你能够只用它来编辑配置文件,也能够将它当作你的开发平台。vim

三、功能强大。它的工做方式与天然语言相似。即便一开始你对vim一无所知,通过一段时间的使用学习,很快也会成为牛人。缓存

一句话,我相信一旦你开始学习,你会以为就像掌握母语还有基础数学这些基本技能同样,也能天然而然地掌握vim。好了,在了解这些知识以后,让咱们正式开始vim技术的学习吧。安全

Approach

Kana大神说过,对vim的掌握有五个层次:编程语言

  • 层次0: 对vim一无所知
  • 层次1: 了解vim的基本使用
  • 层次2: 知道可视模式
  • 层次3: 知道多种移动动做
  • 层次4: 再也不须要可视模式

对此我并不了解,不过我认为这种观点值得咱们注意。毕竟,kana是vim大神。在本教程中,我将经过下面四个主要模块来向你展现vim。编辑器

  1. 基础介绍:这部分基础介绍能快速创建起你对vim的正确认知。
  2. 具体操做: 这块是干货。作好准备来享用吧。
  3. 进阶: 这部分我会教你怎样成为vim牛人。
  4. 常见问题: 这里会讲述一些常见问题解决技巧。

换句话说,若是你已经对vim有所了解的话,建议你从具体操做这部分开始。若是你熟练掌握这部分的话,就直接进入进阶开始学功夫。假如你看这篇教程是为了某个具体问题,那么请进入常见问题章节。工具

因此呢,创建vim世界观,vim基本操做,高手进阶以及常见问题——这几部分任君挑选。

配置

我曾说过,不但愿这是一本超级vim配置手册,网上已经有不少这类教程了。本教程的目的在于强化你对vim的理解,帮助你熟练掌握这个工具。不过咱们也会稍微介绍一些基本的配置。

首先,我建议你安装(几乎)自我管理的vim。我就曾试过Janus(vim的发行版),可是我没法肯定它究竟在作什么,这让我感到很挫败。我偏好的配置就像vim自身同样,简单而优雅。

为了达到这个目的,我直接将用户主目录下的.vim目录和.vimrc做为配置文件。

A few key ~/.vimrc changes

./vimrc修改经常使用键

首先呢,我以为使用<Esc>键来退出插入模式实在是太老土了。Vim关注的是效率,若是不是特殊状况,手指尽可能不要离开键盘中间排。而这种ESC操做实在是没效率,因此不要用这个。

inoremap jk <ESC>

【注意: 有些人喜欢将<ESC>映射为jj,可是我以为映射为jk可能更天然一点】

修改leader键

反斜杠也一样存在这种问题,因此就像其它指导文档推荐的那样,我也喜欢将引导键重映射为逗号(,)。

let mapleader = “,”

经过这样的配置,能够简化咱们接下来的命令执行,好比执行映射的缩写命令时,只需右手中指往下一格就能够轻松输入逗号,而不须要向上再向右去远远地按反斜杠键。

重映射CAPSLOCK

大写键不在vim的配置文件中,不过这个键的位置比较好,而它的默认功能咱们又经常用不上。对我来讲,CAPSLOCK键没啥用处,因此我将它映射为Ctrl键(从操做系统层面来设置)。这样若是我要执行Ctrl-XX操做时只需将左小指左移就能够了。

此外,推荐其余几项基础设置,这样使用更加方便。

filetype plugin indent on

syntax on

set encoding=utf-8

要知道,优化vimrc文件是一个很是值得花时间去研究的问题,这里说的几个建议仅仅是皮毛。推荐查看个人设置或者阅读这几篇引用文章

使用Pathogen管理插件

【请注意:若是你不熟悉或者并不喜欢插件,能够跳过这一节。等你下次想通了再来看看。】

远离Janus

对我来讲,Janus最能吸引个人地方在于它的插件管理,不过我能够经过Pathogen来实现。基本上,经过如下几步就能够了:

  1. 安装Pathogen
  2. 将你须要的插件git clone 克隆到~/.vim/bundle
  3. 在配置文件~/.vimrc中添加execute pathogen#infect()

利用github来实现备份和可移植性

为了备份vim设置,我将整个~/.vim目录经过git库保存在这里。这样即使我新装了系统,也能够很方便的使用git clone https://github.com/danielmiessler/vim获取个人偏好设置。

也许你也会喜欢这样作。

简单一步clone以后,将~/.vimrc软链接到~/.vim/vimrc就能够了。

Vim即语言

Vim最成功的闪光点莫过于一旦你开始使用它,它就会让你欲罢不能。Vim就像语言同样,拥有名词、动词、副词等属性。

虽然个人这种说法从技术层面可能并不许确,可是却能帮助你更好地理解vim的工做机制。重申一次,本教程的目的不是为了取代其余教程或帮助手册——而是为了帮助你理解其余这些文档晦涩难懂的部分。

动词

所谓动词指的是咱们执行的动做,这些动做能够施加在名词之上。能够看看下面几个常见的动做:

  • d: 删除
  • c: 修改
  • y: 拖拉(拷贝)
  • v: 可视化选择 (V for line vs. character)

修饰语

定语用在名词以前,代表以哪一种方式来执行动做。几个例子:

  • i: 内部
  • a: 周围
  • NUM: 数字 (e.g.: 1, 2, 10)
  • t: 查找到指定字符,并跳转到这个字符的前面
  • f: 查找到指定字符,并跳转到字符所处的位置
  • /: 查找字符串 (literal or regex)

名词

在英语中,名词用来表示你所操做的对象。它们都是客体。在vim中也是这样。下面列出vim中的名词:

  • w: 单词
  • s: 句子
  • ): 句子 (另外一种操做方式)
  • p: 段落
  • }: 段落 (另外一种操做方式)
  • t: 标签 ( HTML/XML)
  • b: 块 (编程语言)

Nouns as motion

一样,你也能够将名词视为移动动做,这意味着你能够用名词表示在文本的跳转范围。咱们能够在“移动”章节中看到例子说明。

使用vim语言来组成语句(命令)

好了,如今咱们有句子的不一样组成部分,该怎样将这几部分组成完整的句子呢?就像英语同样,凭感受将动词、修饰语和名词组合起来。

对于下面这些符号,根据颜色的不一样来区分句子的不一样组成部分:

删除两个单词

d2w

修改所在的句子(删除当前句子并进入插入模式)

cis

拷贝当前所在的段落

yip

修改当前光标所在位置到下一个括号之间的文本内容

ct<

记住,这里的“目标”是尖括号,除此以外还能够是任意字符。从语法上来讲,使用单个字母”t”来表示这个向前查找的“目标”,这样我就可使用“dt.”表示删除当前位置到下一个句号之间的内容,”yt;”表示拷贝当前位置到下一个分号之间的内容。

看起来多漂亮!当编辑文本时采用这样的思惟方式可使得操做更加优雅,符合咱们的直觉思惟,并且就像其余语言同样,熟能生巧。

具体操做

如今,在了解这些基本操做后,让咱们结合具体操做来更进一步学习。

处理文件

一些对文件的基本操做。

  • Vi file :使用vim打开要编辑的文件
  • :w :保存修改
  • :q! : 退出vim,后面加感叹号表示不保存修改强制退出
  • :wq: 保存修改并退出
  • :saveas ~/some/path/: 将文件保存到其余位置

【注意:相比较:wq 我更喜欢使用ZZ,由于我以为不须要输入冒号我以为会快一点。也可使用:x】

  • ZZ: 同:wq

查找文本

对于任意一款编辑器,查找文本都是最基本需求。Vim拥有很强大的文本搜索功能,这一节将着重讨论vim的文本搜索。

搜索字符串

Vim中最基本也是最强大的搜索方式是”/”命令,在窗口最底端输入你须要查找的字符串并回车就能够了。

查找include字符串

/include<CR>

查找结果以下所示,因此匹配结果都被高亮显示:

搜索完成后,输入”n”依次向下查找,或者”N”向上查找。若是想要逆向查找字符串也可使用”?”来代替”/”.

跳转到指定字符

Vim有一招特别酷,无论你在哪儿,都能查找特定字符并直接跳转过去。好比说,我正在编辑HTML文件,

向前查找并直接跳转到<字符

f<

向前查找并跳转到<的前一个字符

t<

你能够这么理解,第一种找出目标(f),直接定位到查找对象;第二种到达目标(t),向着目标对象前进,定位到目标的前面。

比较怪异的一点是,能够将它们做为命令中的名词。就好比刚才我在编辑这句时:

修改到下一个”<”之间的内容

ct<

对任意字符均可以这么作,好比说,句号,尖括号,圆括号,普通字母等等。这样你就能够查找文本并跳转,或者你知道具体位置并直接跳转。

【注意:当你搜索指定字符时,可使用分号跳转到下一处——无论是t搜索仍是f搜索。逗号能够用来反向跳转到上一处。】

搜索总结

  • /{string}: 搜索字符串
  • t : 跳转到某一字符前
  • F : 跳转到某一字符处
  • *:搜索当前光标位置单词的其余实例
  • n : 搜索完成后,跳转到下一个匹配实例
  • N :搜索完成后,跳转到上一条匹配实例
  • ; : 跳转到指定字符时,使用分号跳转到下一实例
  • , :跳转到指定字符时,使用逗号跳转到上一实例

游走于文本中

提升编辑效率相当重要的一点是:在文本内的自由移动跳转。对vim来讲,充分利用咱们上文所说的vim语言的基本准则,就能够既简单又优雅地作到。首先,介绍基础概念。

基本移动动做

咱们从键盘中间排开始介绍。受过训练的打字员通常都习惯将右手指放在jkl;这几个键上,就让咱们从这里开始使用vim。

  • j : 向下移动一行
  • k :向上移动一行
  • h :向左移动一个字符
  • l :向右移动一个字符

刚开始可能使用得不太习惯,不过只需几分钟的练习以后,就会习惯成天然,你甚至会想要在word文档里面也这样用(顺便说一下,word文档不支持)。

总结起来就是:右手食指和中指用来上移下移,右手食指和无名指用来左移右移。

行内移动

你能够在当前行内自由的移动。

  • 0: 移动到行首
  • $: 移动到行末
  • ^: 移动到行首非空字符
  • t”: 跳转到下一个引号前
  • f”: 跳转到下一个引号处

【注意: 逗号和分号会重复以前的t和f跳转】

按单词移动

除了按行和字符移动外,还能够按单词移动:

  • w: 先前移动一个单词
  • b: 向后移动一个单词
  • e: 移动到当前单词末尾

当使用大写字母时,vim会忽略掉单词间的分隔符,这样本来被分隔符隔开的多个单词会所以被视为一个大单词。

  • W: 向前移动一个大单词
  • B: 向后移动一个大单词

这种大写命令的优点在咱们实际工做中会频繁地碰到。

按句子或段落移动

  • ):向前移动一条句子
  • }: 向前移动一个段落

在屏幕间移动

  • H:向上移动一屏
  • M:移动到屏幕中间
  • L:移动到屏幕底端
  • gg: 移动到文件顶端
  • G:移动到文件结尾
  • ^U: 向上移动半屏
  • ^D: 向下移动半屏
  • ^F: 下一页
  • ^B: 上一页

来回跳转

在普通模式下,能够在两点间来回跳转,这在实际操做中很是有用。

  • Ctrl-i: 跳转到以前所在的位置
  • Ctrl-o: 跳回你实际的位置

其余动做

  • :$line_numberH: 移动到指定行号
  • M: 移动到屏幕中间
  • L: 移动到屏幕底端
  • ^E: 向上滚动一行
  • ^Y: 向下滚动一行
  • ^U: 向上移动半屏
  • ^D: 向下移动半屏
  • ^F: 向下移动一页
  • ^B: 向上移动一页

如今将因此移动动做总结到一块儿:

移动命令总结

  • j: move down one line
  • k: move up one line
  • h: move left one character
  • l: move right one character
  • 0: move to the beginning of the line
  • $: move to the end of the line
  • w: move forward one word
  • b: move back one word
  • e: move to the end of your word
  • ): move forward one sentence
  • }: move forward one paragraph
  • :line_number: move to a given line number
  • H: move to the top of the screen
  • M: move to the middle of the screen
  • L: move to the bottom of the screen
  • ^E: scroll up one line
  • ^Y: scroll down one line
  • gg: go to the top of the file
  • G: go to the bottom of the file
  • ^U: move up half a page
  • ^D: move down half a page
  • ^F: move down a page
  • ^B: move up a page
  • Ctrl-i: jump to your previous navigation location
  • Ctrl-o: jump back to where you were

【注意:前面说过我将CAPSLOCK键映射到Ctrl,全部这些基于Ctrl的命令,我均可以用CASLOCK来代替】

修改文本

好了,了解一堆在文本中移动的命令后,咱们能够开始学习对文本的修改了。须要记住这一点:这些移动命令会一直陪伴着咱们——它们是vim语言的一部分(它们是上文提到的修饰语)。

Understanding modes

首先咱们要弄清楚模式的概念。刚开始说到模式可能有点违反咱们的直觉,不过一旦习惯以后就会使用得很是的天然。不少vim指南都从介绍模式开始,不过我发现若是直接从模式开始有点很差理解,从普通模式与插入模式之间的切换入手会好一点。

  • 从普通模式开始。对新手来讲vim最让人郁闷一点莫过于打开文档却不能直接编辑。其实,你也能够输入一些个东西,不过若是你真这么作的话你的文档可能会变得一团糟。
  • 普通模式也叫命令行模式,由于一般在这个模式下输入vim命令。这些命令能够是移动、删除或者其余操做,以后进入插入模式。
  • 插入模式下能够直接对文件进行修改,有不少种方式能够从普通模式切换到插入模式。不过不用担忧,虽然方式多样,只要多加练习就能够熟练使用了。
  • 可视化模式下能够选择文本。这个模式看起来与普通模式很是像,不过这个模式下移动操做会改变高亮选择的区域。你能够逐行选择也能够逐字符选择,无论哪一种选择模式下,移动操做都会高亮选择更多的文本内容。
  • 选中以后,可视化模式的优点就体现出来了,咱们能够对选中的所有文本作操做,大大提升了效率。
  • Ex模式下,光标处于屏幕最下方,冒号后能够输入命令。具体内容在后面作介绍。如今只须要知道在这种模式下能够运行一些命令行任务就能够了。

除了上面介绍的模式外vim还有一些其余的模式,不过本教程不作介绍由于它们不是首要任务。

记住vim语言

如今让咱们一块儿回忆vim语言: 动词、修饰符、名词。假设咱们从普通模式开始,如今想要切换到插入模式下修改文本。

动词能够实现这种切换,而且有好几种选择。咱们能够修改(c),插入(i),或者追加(a),还有其余变种。

基础修改/插入命令

让咱们从这几个可选命令开始。

  • i : 从当前光标位置以前插入
  • a : 从当前光标位置以后插入
  • I :从当前行开始位置插入
  • A :从当前行行末插入
  • o : 在当前行下新增一行,并重新行插入
  • O :在当前行上新增一行,并重新行插入
  • r : 替换当前光标所在字符
  • R :替换当前光标的字符,并一直向后替换(替换模式)
  • cm:修改文本,其中m表示移动的动做,好比,一个单词,一句或者一个段落。
  • C :修改当前所在行
  • ct?: 修改问号前的这条问句内容
  • s:替换当前字符
  • S: 替换整行

修改句子

cis

移动到行首并进入插入模式

I

在当前光标位置以后进入插入模式

a

从上面例子可知,有多种方式能够进入插入模式输入文本。还有一些简写来执行多条操做,好比说删除并进入删除模式。

删除从光标所在位置开始到行末的全部内容,并进入插入模式

C

删除当前行并进入插入模式

S

修改大小写

能够经过波浪符来变动大小写。就像你猜测的那种方式工做:无论你光标所在字符仍是可视模式下选择的文本均可以。

格式化文本

Vim还能够快速格式化文本,好比格式化一整段文本,使用下面这个命令就能够很容易实现:

格式化当前段落

gq ap

gp根据预设的文本宽度testwidth以及参数指定的文本范围来工做,这意味着对于你指定的任意范围的文本,gp均可以自动校准宽度,使得文档看起来干净又整洁。

【注意: ap表示文本对象”整个段落”的覆盖范围】

删除文本

在了解怎样修改文本后,接下来看看怎样直接删除文本。可能你已经知道了,跟前面差很少——只不过实现的动做不一样罢了。

基本删除命令

  • x: 删除当前光标的字符
  • X:删除当前光标的前一个字符
  • dm: 根据定义的m来肯定删除范围,一个单词或者一句话或者一个段落。
  • dd: 删除当前行
  • dt. : 删除当前位置到下一个句号之间的全部内容
  • D: 删除当前光标位置到本行末的全部内容(对比上面的C,D不会进入插入模式)
  • J: 将上下两行合并(删除两行之间的换行符)

足够简单吧?

撤销与重作

若是一个编辑器连撤销和重作的功能都没有,你确定不会用它。vim就像咱们前面注意到的那样,尽其所能让咱们更顺手地操做,撤销与重作也不例外。

  • u: 撤销上一个动做
  • Ctrl-r: 重作上一个动做

【注意:记得将CAPSLOCK键映射为Ctrl,这样你才能更方便快速的使用组合键。】

这两个动做均可以重复操做,你能够一直撤销啊撤销回到最初保存点,也能够一直重作啊重作到撤销前的状态。

重复动做

Vim全部命令中最强大的那个莫过于点命令,听起来有点奇怪是否是?解释一下,经过“.”这个小点可让你作一些很棒的事情——重复以前你的任何一个操做。

使用“.”来重复上一次操做

你所作的许多操做可能都有重复的价值。好比进入插入模式添加一些文本内容。你只需执行一次,而后一直执行点命令来重复就能够了。请看下面的例子。

删除一个单词

dw

紧接着执行,再删除5个单词

5.

多么给力! 若是结合可视化模式,发挥的能力更让你大开眼界。

复制与粘贴

快速拷贝与粘贴文本一样也是文本编辑器的必备功能,vim固然也是这方面的高手。

【注意:除了点命令外,&也是一种强大的重复命令,用于重复ex模式下的上一条命令(还记得ex模式吗?)】

拷贝文本

Vim的拷贝与你们预期的方式可能略有不一样。拷贝命令不是你们料想的c。不知你还记不记得,上文提到c表示“修改”,已经被占用了。Vim用拉取来表示拷贝,简写为y。

  • y: 拷贝选中内容
  • yy: 拷贝当前行

记住,这种拷贝动做与你熟悉的那种拷贝并没有不一样——你只是在目的处复制了一份而已。

剪切文本

剪切很简单:跟删除操做差很少。因此呢,剪切实质上就是将删除的内容挪到缓冲区,而后将这段删除的内容再粘贴就能够了。

粘贴文本

粘贴跟咱们想的同样——使用p命令。因此呢,若是你执行dd命令删除了一行,你能够用p粘贴回去。

有一点要记住:粘贴的起始位置从你当前光标位置以后开始,根据你拷贝的内容,你要么粘贴字符或单词,要么粘贴行或列。若是想撤销粘贴,使用通用撤销命令“u”就能够了。

拷贝复制命令总结

  • 从当前行拷贝到下一个命令(名词)
  • 拷贝当前行的快捷键
  • 在当前光标所在行下一行黏贴拷贝或者删除的内容
  • 在当前光标所在行前一行黏贴拷贝或者删除的内容

交换两行的位置

ddp

使用这条命令能够很快速的交换两行的位置。第一部分删除你所在的行,第二部分将它粘贴回以前所在位置的下面。(ps:文章中用的是above,可是实际上拷贝回下方位置)

拼写检查

若是没有拼写检查的话,感受会很糟糕,还好vim这方面作得很好。固然咱们须要先在配置文件中配置拼写检查选项。

在~/.vimrc的某个位置中添加

找出拼写错误

若是在配置文件中设置了拼写检查的选项,那么拼错的单词会自动添加下划线。你也能够手动输入:set spell和:set nospell来启用或禁用。

无论怎么说,一旦开启了拼写检查,若是存在拼写错误的话,你就可使用如下命令来跳转:

跳转到下一处拼写错误

]s

跳转到上一处拼写错误

[s

若光标处是错误单词,给出修改建议

z=

将识别的错误单词标记正确

zg

将vim视为正确的单词标记为错误单词

zw

我习惯在~/.vimrc中添加一些拼写相关的简写命令。首先就是让修正拼写错误的命令变得简单:

将拼写修正标记为<leader>f

在某些状况下,好比说我须要创造性的拼写一些单词时,我会使用下面的命令来取消拼写检查。想要从新打开拼写检查只要再执行一次这个命令就能够了。

Toggle spelling visuals with <leader>s

nnoremap <leader>s :set spell!

替换

Vim的另外一个强大的功能是替换。命令分为三部分,首先指定将要被替换的字符串,以后是替换的新字符串,最后指定替换范围。

基本设置为:%s

将每行的foo替换为bar

:%s /foo/bar/g

将当前行中的foo替换为bar

:s /foo/bar/g

【注意: 两个命令的不一样之处在于,单行替换s前少了%】

还有许多其余的选项,不过这些是最基本的。

PS: 前面&命令重复此类操做(:进入ex模式后执行的命令)

进阶

太棒了。咱们已经讨论了大部分文本编辑器的基本功能,以及在vim中如何使用这些功能。如今能够进行高级vim的任务了——请注意,我说的高级进阶是对初学者而言,不是Kana这样的大神级人物。

重复操做

在稍早以前咱们讨论了“.”点命令的重复功能。有些命令适合使用点命令来重复,有些则不适合,区分这两种命令很重要。

一般,若是你想要使用“.”(或者如Drew Neil称之为点命令)实现命令重复,说明你想用点命令缓存的命令来作比较细致的操做。

好比说你要向若干行行末添加一些内容,可是添加的前提是被添加的行包含指定的字符串。你可使用以下方式来实现:

搜索字符串

/delinquent

如今,只要你按下“n”键都会跳转到下一个搜索到的实例。那么,从第一个匹配实例开始,咱们给它追加文本。

在行末添加文本

A[DO NOT PAY] [Esc]

好,这条命令执行完成了。不过接下来还有12个地方须要你来作。点命令容许咱们简单地重复执行上一条命令,并且咱们还须要保存搜索结果,能够将这两条命令结合起来。

跳转到下一个匹配实例并向行末添加文本

n.

注意,这种方式将动做与缓存的命令结合起来,因此咱们能按照预期地那样跳转并执行命令。

文本对象

文本对象很特殊。这些文本对象的存在使得你能够操做(动词)更加复杂的对象(名词)。比起选中某个单词并删除、跳转到句首并删除句子等简单操做来讲,无论你在何种文本对象的区域内,你均可以对它们执行这些操做。

说是说不清,实践出真知嘛,咱们能够看几个例子。

单词文本对象

首先来看基于单词的对象

  • iw : 单词内
  • aw :单词周围

这些都是目标(名词),因此咱们能够对它们作一些操做,好比说删除、修改等等。

删除单词(包括单词周围的空格)

daw

【注意: 对象内部与对象周围这二者之间的区别在于单词旁边是否有空格】

句子文本对象

  • is: 句子内部
  • as: 句子周围

句子对象的工做原理与单词对象是一致的,想象一下,你敲了一大段句子,敲了一半后悔了想要删掉。你就能够简单的使用下面这条命令,而不用回到句子开头来申明删除整行。

修改整条句子

cis

这条命令杀伤力仍是挺大的,它会删除整条句子并进入插入模式等待你输入新的内容。

更多对象类型

还有许多其余的对象类型,我只简单的来介绍一下。

  • 段落 : ip 和ap
  • 单引号 : i’和a’
  • 双引号: i”和 a”

当我编辑代码或者HTML文件时,时常会用到这些命令。关键是若是这些对象文本存在问题,你甚至并不须要处于这些对象内部就能够操做它们;若是光标当前位置在双引号外面(经测试,跟双引号处于同一行并在双引号前面),只须要输入ci”就能够删除双引号内部的全部内容,并将你挪到双引号中间进入插入模式等待你的输入。简直不要太酷。

对其余类型的某些对象一样适用,好比说各类括号(圆括号、尖括号、大括号)和标签(html)。

好比说编辑HTML连接时,URL地址通常在双引号之间,连接文本在标签中定义;经过vim这两条命令能够很方便地修改:ci”(修改URL)和cit(修改连接文本)。

文本对象总结

下面列出常见的文本对象:

  • 单词: iw 和 aw
  • 句子: is 和 as
  • 段落: ip 和 ap
  • 单引号: i’ 和 a’
  • 双引号: i” 和 a”
  • 反勾号 : i· 和 a
  • 圆括号: i( 和 a(
  • 方括号: i[ 和a[
  • 大括号: i{ 和a{
  • 标签: it 和at

总的来讲,我使用最多的是单词,双引号和标签。

进入可视化模式

Vim的有许多迷人之处吸引着咱们,不过它们相比较可视化模式的技能来讲,仍是太弱了。

也许可视化模式的最强大之处在于:咱们前面学到的全部的一切命令,经过结合可视化模式使用,能力都会大有提高。这是因为在可视化模式下选中的高亮文本,能够所有做为命令的操做对象。

首先,学会进入可视化模式并选择文本。经过“v”进入可视化模式,有三种选择。

  • 基于字符选中: v
  • 基于行选中: V
  • 段落选中: Ctrl-v

在容器内部选中文本

有时候你会处于一段文本中,两头被,.({[之类的符号所包围。你可使用下面的命令来选中这部分的内容:

选中圆括号中的内容

vi(

选中中括号之间的内容

vi[

你还能够加数字限定选择的层数(好比说你处于嵌套层)

选中两层大括号之间的全部内容

v2i{

【注意: 你也可使用va来代替vi。请不要被这些迷惑。它们与咱们所知的名词和动词没有什么不一样】

基于字符的可视化选择

从基于字符的可视化开始介绍(从普通模式输入v进入可视化模式),在这种模式下你能够选中单个字符、多个字符、单词等等。相比较行选择模式来讲,我比较少使用这种模式,不过只是相对而言,其实用的也仍是挺多的。

这里最主要的是要理解这一点: 处于可视化模式中,你的移动动做会修改被高亮选择的文本。这就意味着,w或)之类的动做也会起做用,它们能够扩展当前高亮选择的范围。以后,这部分高亮文本就能够做为命令执行的目标。

基于行选择的可视化模式

普通模式下输入V进入这种模式,以后咱们会讨论在这种模式下的操做。

基于列选择的可视化模式

可视化模式中还能够垂直地选择文本,这对操做列数据来讲很给力。

可视化模式下对选中文本的执行动做

对这些文本作什么操做都是你的自由,不过最广泛的操做是删除、拷贝和粘贴。想一下你日常用鼠标选中一片文本会作什么操做?

进入可视化模式,选中两个以上单词并拷贝

vwwy

拷贝以后你能够在任何你但愿的地方输入p来粘贴。

或者你能够作一些基于行的操做。

进入行选择模式,删除几行文本

Vjjd

你也可使用文本对象,不过这种操做不太安全,最好别作。

可视化模式下选中一整个段落

vip

可视化模式下选中一整段文本并粘贴到当前段落之下。

vipyjjp

不要由于命令很长而感到崩溃。要记住,这些命令跟咱们日常说话是同样的。你能够没有任何困难地、很随意地念叨:

我想去商店。

这条命令也是同样的:

拷贝这一段,下移两行,再粘贴。

将可视化模式与重复结合

可视化模式还有一个很神奇的地方,对于选中的文本,你能够经过点命令来执行以前缓存的命令。请看下面这个例子:

若是想在每行前面都加个冒号,能够如今第一行foo以前添加,而后可视化模式下选择之下全部行,执行点命令就能够了。

【注意:要想使用这个功能,必需要在配置文件中添加映射 vnoremap . :norm.<CR>】

BAM!

以为这功能没有那么酷炫? 那就想象一下: 你有个六万行的文件,每行都与例子同样,须要追加个冒号。你会怎么作?

对整个文件添加分号

0i:j0vG.

wut

大大简化了咱们的操做,大杀器一枚。步骤以下:

  1. 走到第一行行首并插入一个冒号(0i:)
  2. 走到下一行定位到行首位置(j0,注意以前是插入模式,须要先回到普通模式)
  3. 选中当前行到文件末尾的内容(vG)
  4. 给选中的内容添加冒号(.)

这样对六万行文件的操做就所有完成了。你甚至不须要去记一些乱七八糟的口诀——就像学骑单车会摔倒同样,摔着摔着你就会了。相信我。

使用宏

有些人会以为宏很可怕,其实否则。宏只用来完成这样一件事: 记录你作的一切,在你须要的时候帮你再作一次。下面是一个简单总结:

  • qa: 开始记录接下来要执行的动做,并命名为a
  • q: 中止记录
  • @a :将宏表明的动做再执行一次

很简单啊是否是?你能够保存多个宏,好比说宏a、宏b、宏c等等。当你须要的时候执行@a或者@c之类的就能够了。

什么场景下使用宏?

你可能会问:

既然可视化模式与点命令的结合已经这么强大了,咱们为何还要使用宏呢?

问得好,不过答案挺复杂。宏能够作你所作的一切,来看看这样一个流程

  1. 在当前行搜索“widget”
  2. 找到最后一个匹配到的单词并添加–maker
  3. 走到行首并添加一个分号
  4. 走到行末再添加一个点号
  5. 若是行末有空格则删除

这么一堆工做,我们仍是假设文件有六万行,试着在Microsoft word之类的工具里完成这些操做,照样会让人感到万分痛苦。

不过在vim中,这都不算事儿,你只须要把这些动做都作一遍(recording模式下),而后对每一行从新执行宏就能够了。

【注意:若是想要对可视化选中文本执行宏的话,能够执行:normal @a(或者其余你所定义的宏的名字),这条命令会临时将你切换到普通模式,针对每一行执行宏命令】

技巧

下面咱们来看一些你们常常问的一些问题,总结出来节约你们时间。

删除行末空格

根据打开文件的类型不一样,可能须要你对回车符和换行符作一些处理。这里介绍如何删除行末那些烦人的Ctrl-M字符。

删除行末的Ctrl-M字符

:%s/s+$//

修改文件类型

set ft=unix

set ft=html

set ft=dos

【注意:若是要显示当前文件类型,在配置文件中添加:set filetype,或者在vim中直接执行这条命令就能够了】

包装文本

借用Surround插件,咱们能够很

  • cs”‘: 将光标所在单词两边的双引号修改为单引号
  • cs'<q> :作一样的事,不一样的是将单引号修改为<q>
  • ds” : 删除两边的的配对双引号
  • ysiw[ :在当前单词两边加上中括号
  • ysiw<em>: 给当前单词(其余文本对象也可)添增强调标签!!!知道我为何这么激动吗?由于这个操做可使用点命令来重复!
  • Visual Mode: 可视化模式下,选中任意文本,输入S。vim会带你跳转到窗口最底端。这时候你能够输入任何你想给这段文本打上的标签,好比说<a href=”/images”> ,回车试试?

总结

经过本教程我但愿你们能明白如下两点:

  1. vim 是能够学会的
  2. vim 很强大

上面介绍的那些vim基础用法,即使你只喜欢其中一部分,我想可能也会加深你对编辑文本的热情——这可不是小事。你对操做的编辑器越熟练,思惟也就愈加散,我想这是堪比史诗级的大事了。

更为重要的是,这也是为何要求你得精通你选择的编辑器。只有精通编辑器,不被编辑器的操做所阻滞,当你脑内思绪奔腾时,你才能激扬文字跟紧思绪跳跃的步伐。

或者,你也能够将这一切都抛开,成为那些被人所取笑的人——无论怎样,我但愿本教程能对你有用。

 

 

 

转载地址:http://blog.jobbole.com/86132/

相关文章
相关标签/搜索