刘志龙

9 天前

Vim 指尖飞舞之移动篇

本文作者:IMWeb 刘志龙 原文出处:IMWeb社区 未经同意,禁止转载

用了 Vim 许久,发现经常在 h j k l上浪费非常多的时间。如果过多的使用这些在 Vim 上做移动,往往就会非常低效,严格的说,甚至按两次 h 也能找到别的方案替代 。如何更快的移动和跳转呢?

首尾移动

这个非常常用,也是基本用法,简单提一下。(这边只说实际行)

^ 可以快速跳转到行首第一个非空白字符,要和 0 区分开,后者是移动到行首。

$ 是移动到行尾,这个也非常常用,举个简单的例子。比如我们写代码在行位遗漏了分号,我们就可以用如下方式操作:

const a = 1 // $a;
const a = 1;

基于单词的移动

减少使用h j k l 的一个重要操作是多用w b 进行下一个单词行首和上一个单词行首之间的移动。熟悉使用w b 会减少非常多不必要的h j k l

除此之外,ege 有时候比 w b 的场景更合适,比如:

const pig = 1; // 这时候假设光标在 p 这个地方,要把 pig 改成 pigs
const pigs = 1; // eas 可以做到在 pig 后面快速加上 s

查找移动

查找是 Vim 里最快的移动方法之一,可以用 f{char}F{char} 进行正向和反向移动。比如:

const pig = a + b; // 这时候假设光标在行尾,发现变量 a 写错了,要改成 c
const pig = c + b; // Faxic 可以做到把 a 改成 c

实际使用经常会发现一个场景,就是 f{char} 执行一次,可能并不能到我们想要的位置。可能要按多次 f{char} 才到到正确的位置,这时候我们就可以用 ; 用来重复执行,用 , 用来回退。

f{char} 类似的还有 t{char} ,区别在于 t{char} 是到目标字符的前一个位置。之所以需要这样一个操作符是因为有类似如下的场景:

pig.eat(); // 光标在 e 处,要删除 eat
pig.(); // dt( 可以做到删除 eat

多行查找移动

f{char} 虽然很方便,但是只能用在单行查找中, 多行查找我们使用 /{目标字符} 。多行查找是必须掌握的能力之一,否则无法再 Vim 中存活。多行查找经常被用来的用法还有如下:

const obj = {a: 1}; // 光标在 c 处,这时候如果要删除 const
obj = {a: 1}; // d/ob<enter>

位置标记

经常写代码的各位一定会发现写代码或者阅读代码的时候,经常要来回看两个地方的代码。这时候 m{标记字符} '{标记字符} 就要用到了。标记字符可以是 a-z 的任意字符。

m{标记字符} 用来标记位置,'{标记字符}跳到该标记位置

匹配括号

% 用来做匹配跳转,

const obj = {a: 1}; // 光标在 {,要跳转到 }
const obj = {a: 1}; // % 可以做到光标跳转到 }

和其它类似,可以配合删除等操作。比如:

const obj = {a: 1}; // 光标在 {,要删除 {a: 1}
const obj = ; // d% 可以做到删除 {a: 1}

神奇的 {模式}i 与 {模式}a

我们最后要提的,是 {模式}i 与 {模式}a。这两个用法,如果只是要在 Vim 里存活,并不需要了解。但是如果要提高操作效率,却是必不可少的东西。

模式我们可以用d(删除) v(复制) c(编辑) 等模式,这里我们用 d 模式举例。

const teacher = 1; // 光标在 a 处,删除 teacher
const = 1; // daw 可以做到删除 teacher
const teacher = 1; // 光标在 a 处,删除 teacher
const  = 1; // diw 可以做到删除 teacher,注意会保留 teacher 原本后面的空格

daw 这里 w 代表了单词,还有 s p 分别代表句子、段落,这里就不一一举例了。用法和 w 类似。

除了 w s p ,还有 [ { < ' " 等成对的符号可以使用。直接用 v 模式举例:

var tpl = [

  '<a href="{url}">title</a>'

]; // 光标在 u 处

// vi} 会选中 url

// va" 会选中 "{url}"

// vi> 会选中 a href="{url}"

// va] 会选中 [ '<a href="{url}">title</a>' ]

总结

新手在 Vim 中存活不容易,要真正高效的使用 Vim 会更难。但是使用了 Vim 之后,你却会爱上这种编码方式。像现在大家用的更多的 VSCode 等一样都可以设置 Vim 模式。

要高效的使用 Vim,学会高效移动则是必经之路。每一次要多次按h j k l 的时候,都可以考虑是否有更高效的方式移动。

0条评论

    您需要 注册 一个IMWeb账号或者 才能进行评论。