Vim中的跳转

Vim中的跳转方式多样,熟练之后可以肌肉记忆💪做到灵活跳转,十分方便,脱🖱指南,就在这里🐶

一般我们move还是navigate的时候,大部分都是在Normal Mode下,Visual Mode也有一些.

Insert Mode只做好一件事情就可以了,那就是插入内容,当我们完成插入之后要记得

Get Back To Normal Mode.

Esc, C-[, C-o都可以从Insert Mode到Normal Mode,我个人习惯将jk映射到Esc键.

Movement ↪️ Navigation ➡️ In Normal Mode

包含基础跳转, 查找跳转, 插件中的跳转, 寄存器跳转以及文件之间的跳转.

Vim基本的一个操作就是数字加上动作重复多次,比如5k就是上移动5行, 2@a就是执行a寄存器里的宏两次.

Basic Movements 🚶

字符移动: hjkl, 就不多说了.

行移动:

  • gg, G, 🔢+G, 行首, 行尾, 指定行~ 使用频率不算高其实,可以设置相对行set relativenumber, 通过🔢+jk实现行的跳转.
  • +, -分别是回到下一行和上一行的第一个非空白字符的位置.

词汇移动:wW/eE/bB/geE

前向/后向移动一个词汇到头/尾部, 许多符号也是被当做一个词汇看待的,如[]()但是:是不被当做额外的词汇的.

所以,

1
2
if flag: # 如果cursor在flag头部想要  ce  的时候,会把后面的 : 也带走
print("🐶")

另外, cw其实就是ce, change-word不应该把后面的空格也带走,这样更合理一些🤔.

大小写(word/WORD)的定义的词汇的区别是:

  • word, 一系列连续的字符(字母, 数字,下划线,等等, 空格/tab/换行分隔, 空行也被视为词汇)
  • WORD, 一系列连续的非空字符(空格分隔, 空行也被视为词汇)

走起

[{]}系列: 这个系列就比较多了, 在vim中 :h [查看,个人而言,使用较少,常用的有section 跳转和paragraph跳转.

marker系列: 通过m/M+{a-zA-Z}mark一个位置, 此后通过'或者` + marker返回到标记位置. ‘返回到该行, `会返回到该位置. 大写的标记是可以全局进行跳转的.

此外vim在我们进行某些操作的时候会自动进行一些标记✍️

按键 行为
`` 当前文件的上一次jump
`. 上一次change的地方
`^ 上一次插入的地方
`[ 上一次change或者yank的起始位置
`] 上一次change或者yank的结束位置
`</`> 上一次可视化的起始/结束位置

查找跳转:

f/F+char: 行内正向/逆向查找某个字符, ;next, , previous.

t/T+char: 同上,但是cursor定位在所查找字符的前面(正向/逆向方向的前面).

最后就是/ #查找命令了.

jump list: 🕺

<C-i><C-o> 前向/后向切换,要查看jump list, 命令:jumps

change list:

与jump list相似, 我们修改内容的时候,也会保留一个change list, 命令:changes可以查看.

当我们uodo redo的时候其实就是在change list中切换,同时cursor会跳转到相应位置.

g;g,可以前向和后向在change list中进行跳转.

其他:

$^分别是本行最后一个字符和第一个非空白字符.

%匹配括号之间跳转.

在cursor处 *#会后向/前向查找完全匹配cursor位置处的词. 很有用.😀

页面相关:

HML移动到页面的顶部/中间/底部.

C-d, C-u, C-b 向下/向上半页.

C-y, C-e 上下一行.

zz: cursor所在行移动到页面中间. (z系列可以参考帮助文档,包含移动,folds以及spelling相关的命令).

此外fold之间的移动,也需要z系列, 分别是zj, zk, 在一个开启的folds中可以通过[z]z上下跳转

scrolloff: 这个属性指的是进行移动跳转时,cursor下面至少包含多少行内容.设置一个合理的值可以保证我们在移动的时候尽量让要查看的内容在屏幕的中间位置.

Movement ↪️ Navigation ➡️ In Visual Mode

visual mode进行选择的时候,上面那些跳转都是可行的.比如: 🌰

vfe就选择了从当前cursor到下一个e字符的位置.

此外就是在selection中cursor的movements

o: 反方向的最后位置, 来回切换

O/o: 在block visualmode下, 可以四个角来回切换.

大概就这么多了,以后学习到新的还会来补充😝