VIM 快速光标跳转
2018-01-30
vim 快速光标跳转
vim
被誉为编辑器之神
, 通过让程序员完全脱离鼠标, 将双手保留在键盘的主键盘区, 甚至不用移动到键盘的数字区, 提高编程效率
可能很多人已经会使用vim最基本的操作了, 如基本的hljk
的移动, ia
插入, 但更多的时候, 还是最基本的移动和插入编辑, 效率甚至不如普通的文本编辑器, 糟蹋了vim
的很多特性
以下, 是在平常使用中, 能够提高vim效率的一些常用快速跳转
和定位光标
的实践技巧, 希望能提升各位在使用vim时的信心和兴趣
基本的光标移动使用jljk
这几个键, 但这种方式在大范围定位光标时还是太慢了, 甚至还有仍然使用方向键的, 从问价第一行, 移动到最后一行, 按住一个键, 等半天, 岂可忍?
以下的操作均在正常模式
下
文件内光标跳转
文件首行定位
不论我们在文件的什么位置, 快速双击g
键(即gg
), 即可直接定位到文件首行, 如下
文件结尾定位
不论我们在文件的什么位置, shift+g
键(即G
), 即可直接定位到文件结尾, 如下
指定文件行号的定位
如果想跳到文件指定的行, 有两种方式
<line>gg
,<line>
位置填充行号, 即可跳转到文件第line行
<line>G
, 即可跳转到文件第line行
如下
还有一种在命令行模式下的文件行号定位, 上面两种足够用了, 后续再补充
当前文件行后指定行数的定位
比如我当前处在文件第56
行, 我想定位到当前行后的第4行
4j
即可将光标向后定位4行
同理, 如果要往前定位4行
4k
即可
屏幕内行跳转
屏幕首行定位
如果我们想定位光标到屏幕
的首行, 注意, 不是文件
, 是可视的屏幕
的首行, 该怎么做呢
使用shift + h
, 即H
屏幕中间定位
使用shft + m
即 M
即可快速定位光标到屏幕的中间一行
屏幕底部定位
使用shift + l
即 L
即可快速定位到屏幕底部
指定屏幕行号定位
如果我想定位光标到当前屏幕内容
的第3行(从屏幕顶部往下数第3行), 如何定位呢
<line>H
, 通过这种方式即可
屏幕倒数几行定位
如果我想定位光标到当前屏幕内容
的导入第3行(从屏幕底部往上数3行), 如何定位
<line>L
, 即可
当前屏幕行后指定行号定位
假如有一段文字很长, 在文件中虽然是作为一行, 但屏幕中会以多行的形式展示出来,
如下,
可以看出来, 464行是一串很长的文字, 展示时被vim自动换行展示了
我想从1
位置直接跳到HTTP(S)
位置2
的位置, 通过<line>j
不好使了
正确的方法是5gj
, 如下
同理, 往前跳转是5gk
, 如下
单行内跳转
单个字符光标定位
基本的字符左右移动光标我们都知道, h
和 l
(跟我读哎偶
), 无他
基于多个字符的光标定位
如果我想将光标向后移动15个字符该怎么移动呢
15l
即可, 如下,
向前呢? 15h
啊
基于单个单词定位光标
常用的单词跳转有w
, e
, b
, 区别是什么呢
w
是向后跳转到下个单词的首个字母的位置
b
是向前跳转到上个单词的首个字母的位置
e
是向后跳转到下个单词的词尾的字母的位置
没有直接向前跳转到上个单词词尾字母位置的跳转, 不过可以通过ge
实现该跳转,
如下
基于多个单词定位光标
如果想向后跳转3个单词的位置, 该怎么跳转呢
3w
即可实现向后跳转3个单词, 并定位到最后一个单词的首字母的位置, 如下
同理 3b
, 3e
, 3ge
可以向前或向后跳转到对应单词的起始位置或结束位置, 各位自己试试感受一下吧
基于字串的跳转
字串和单词的区别在于, 一个单词由字母, 数字, 下划线或其他非空白字符的序列组成, 单词间以字符分隔(参见 :h word
), 而字串的定义更简单, 他由非空白字符序列组成, 字串之间以空白字符分隔
比如(用[]
表示空格)
sha-1,[]sha-224,[]sha-256,[]sha-384[]and[]sha-512
sha
是作为单词存在的, sha-1
是作为字串存在的(因为之间用空格隔开了)
如何基于字串跳转呢
W
, E
, B
即可, 没错, 就是w
, e
, b
的大写形式, 至于分别跳转到什么位置, 参考web
的跳转吧(gE
的行为同样可以参考ge
哦)
如下
基于某个字符跳转
在一行内, 我们如果通过某个单字符
快速定位,
比如下面
The WebSocket server embedded in aria2 implements the specification
, 我们想快速定位到aria
这个单词的位置
直观可以看到, aria
在一个2
的旁边, 而且这一行只有这一个2
, 如果直接定位到2
, 也就能直接定位到aria
了
通过f<char>
我们可以在行内向后搜索单
字符<char>
, 如下
如果一行内有数个数量较少的独特单字符, 如果重复向后检索呢:
在使用f<char>
检索<char>
后, 在用;
(分号)即可继续向后检索, 用,
(逗号)即可向前检索, 如下
如果我们的光标已经在一行的结尾了, 如果直接在改行向前检索
呢, 也简单, F<char>
即可, 同样可以使用;
和,
控制重复检索的方向
或许有同学听过说
t<char>
也可以实现类似的行内检索,没错,
t<char>
的行为与f<char>
行为类似, 但检索后的光标定位的位置有区别,
t<char>
是定位到<char>
前面一个字符的位置, 而f<char>
是跳转到<char>
所在位置 如下
行尾跳转
如何直接跳转到行尾呢,
$
(跟我读刀勒
), 如下
行首跳转
这里的行首有两种情况, 如下
用[]
表示空格
[][][][]print(`hello world`)
跳转到第一个非空字符
即直接跳转到print
的p
, 这时用^
(我也不知道读什么…), 见下图(跳转到行首所在图)
跳转到行首(不区分空字符)
即跳转到第一个字符的位置, 即便是一个空格, 这里用0
(是个零
, 不是哦
啊), 如下图
总结
以上是vim中常用的快速跳转和光标定位的方法, 大家别再按着一个hjkl
跑啦, 更别再用方向键啊
跟着光标, 在vim里飞来飞去
吧(两只小蜜蜂啊, 飞
在花丛中啊, 左飞飞
, 右飞飞
, 上飞飞
, 下飞飞
…….)