:Y<cr>
,可以实现该目的,但是当Y>99时,需要输入的内容比较多。另外一种方法是输入abs(Y-X)[kj](向上或向下移动abs(Y-X)行),但对于较大的X和Y,计算这个差值并不容易。是否有一种方法可以利用X和Y都在屏幕上可见的事实,快速移动到X和Y之间的某一行呢?
:Y<cr>
,可以实现该目的,但是当Y>99时,需要输入的内容比较多。另外一种方法是输入abs(Y-X)[kj](向上或向下移动abs(Y-X)行),但对于较大的X和Y,计算这个差值并不容易。您可以使用:set relativenumber
命令来实现Y-X计算(仅适用于Vim版本7.3以上)。
您可以使用H
、M
或L
来快速跳转到屏幕的顶部、中部和底部。
H
、M
或 L
。H "Home" top of screen
M "Middle" middle of screen
L "Last" last line of screen
有了行数,它们就会偏移:例如4L
会跳到倒数第三行(1L
和L
是一样的)。
个人而言,我经常使用m
命令来标记一个需要导航的行。从当前位置开始,按下mq
将该位置标记为标签q
;然后导航到另一行,再按下ma
将该位置标记为标签a
;之后,我可以按下'q
跳转到位置q
,按下'a
跳转到位置a
。(q
和a
是任意的,我主要使用它们是因为它们在QWERTY键盘上的位置。)
一旦你有了这些标记,就可以用它们来执行命令。要删除从当前位置到标记为q
的行的内容,只需使用:d'q
还有一种变体,其中使用反引号而不是单引号。这会带您到放置标记的行的确切位置;单引号使用行的开头。
这些标记甚至适用于ex
(命令行)命令。要将搜索和替换限制为特定的一组行,我使用标签b
和e
分别标记起始行和结束行,然后执行以下搜索和替换:
:'b,'es/foo/bar/g
在代码中穿行时,我发现使用文本对象非常容易。我几乎不再使用jk / JK进行大跳跃。相反,我使用{和}浏览空白行。
因为在任何一个屏幕上通常只有那么多的空白分隔符(它们很容易被视觉识别和计数),我发现:
比如假设:
更常见地让我到达预定的行。
更重要的是,许多“括号”编程语言在函数开头有一个左花括号。这些可以使用[[或]]到达。所以有时只需要执行以下操作:
(意思是:转到前一个函数的开始,在第一个连续的行块后)
{
不会停在(或计算)仅由某些空格组成的行。为此,autocmd BufWritePre *.{cpp,etc} %s/\s\+$//e
来拯救! - dash-tom-bang<enter>
键,通常会在该行保留缩进。另一方面,Vim 会删除该空格。PEBCAK 解释了一些问题,但并不是全部。:) 我无法告诉你哪些编辑器会这样做,因为这里的人们使用各种不同的免费和非免费工具。 - dash-tom-bang我使用的VIM版本在按J或K之前可以让你立即估算要移动的行数。
15K向上移动15行
你成为更强大的Vim用户后,一眼就能数出更多的代码行数。
也许有一些聪明的技巧,但我只是输入类似于17k/23j之类的东西。
此外,在你想要跳转的字符串上搜索某个单词也很有用。
另外,zz
(居中显示)在这种情况下有时也很有帮助。
YG
д»Јжӣҝ:Y<CR>
пјҢиҝҷж ·е°‘жү“дёӨдёӘй”®гҖӮ - dmedvinskyYgg
。有些人觉得这样更容易(但我不是这种情况)。 - sidyll