post

Vim zh-cn:移动光标

Contents

简介

写完了初稿之后,编辑的时候就需要在文档的不同部分之间大量移动。例如,你正在撰写一个故事,忽然你来了灵感,但是发展这个情节需要回到主人公刚抵达新城市的段落(或者类似的情节),怎样移动地快以至于别忘了灵感呢?

让我们来看看Vim的妙招。

注意
所有的移动都是从当前位置开始
  • 想移动光标到下一个词?按w
  • 想移动到下一段?按}
  • 想移动到字母’h’第三次出现的位置?按3fh
  • 想向下移动35行?按35j
  • 在光标移动之后,想跳回到上一个位置?按ctrl-o
  • 想学学这些都是怎么回事?进入正题吧。

在此之前,先打开一个名为chandrayaan.txt的文件,键入以下的文字(摘自Wikipedia):

Chandrayaan-1 is India’s first mission to the moon. Launched by India’s national space agency the Indian Space Research Organisation (ISRO). The unmanned lunar exploration mission includes a lunar orbiter and an impactor. The spacecraft was launched by a modified version of the PSLV XL on 22 October 2008 from Satish Dhawan Space Centre, Sriharikota, Andhra Pradesh at 06:23 IST (00:52 UTC). The vehicle was successfully inserted into lunar orbit on 8 November 2008. The Moon Impact Probe was successfully impacted at the lunar south pole at 20:31 hours on 14 November 2008.

The remote sensing satellite had a mass of 1,380 kilograms (3,042 lb) at launch and 675 kilograms (1,488 lb) at lunar orbit and carries high resolution remote sensing equipment for visible, near infrared, and soft and hard X-ray frequencies. Over a two-year period, it is intended to survey the lunar surface to produce a complete map of its chemical characteristics and 3-dimensional topography. The polar regions are of special interest, as they might contain ice. The lunar mission carries five ISRO payloads and six payloads from other international space agencies including NASA, ESA, and the Bulgarian Aerospace Agency, which were carried free of cost.

用Vim的方式移动光标

你最常使用的键就是’hjkl’。这4个按键分别对应左移、下移、上移、右移光标。你也注意到了这些键直接位于右手的键位范围。

为何不用原有的箭头键呢?问题是它们位于键盘上另外一个区域,挪起手来和把手换到鼠标一样费劲。

记住,右手手指应该一直放在jkl;键上(大拇指在空格键上)。现在,我们来看看怎么用这四个键:

用h,j,k,l代替箭头键

h 向左移动放在’j’上的食指去按’h’。这是四个里面最左边的键,意味着是向左移。
j ‘j’下垂,意味着向下移。
k 向上突出的’k’意味着向上移。
l ‘l’在最右边,意味着向右移。

注意到可以在操作前面加个数字表示重复的次数。例如,2j会重复j操作2次。

打开chandrayaan.txt文档,练习一下这几个键:

  • 置光标于文档的第一个字母’C’上。
  • 按下2j,它会跳过这长长一行和下面的空行,转到了第三行,即第二段。
  • 按下2k回到刚才的位置。或者,按下ctrl-o后退。
  • 按下5l向右移动5个字符。
  • 按下5h向左移动5个字符。或者,按下ctrl-o后退。

养成用'hjkl'键代替箭头键的习惯。没试几次之后,你就会发现这几个键用起来能有多么快。

类似的,还有一些基本键来取代以下的特殊移动。这也是为了减少手的挪动。在这些特例中,人们还是倾向于特殊键,所以我们都不必强求。(译者注:Vim的这些组合键需同时按下两个键,还不如默认的)。

传统的方式 Vim的方式
用’Home’键移动到行首 ^键,联想到锚头(’anchored to the start’)
用’End’键移动到行尾 $键,联想到’the buck stops here’(译者注:[杜鲁门总统的名言])
用’Page Up’键上滚一屏 ctrl-b意思是向后(’b’ackward)滚动一屏
‘Page Down’键下滚一屏 ctrl-f意思是向前(’f’orward)滚动一屏

如果你知道要跳转的绝对行号,比如第50行,按下50GVim就会跳到第50行。如果没有指定行号,G会跳到文件的最后一行。怎样跳到文件的第一行呢?很简单,按1G就行。看看这个键能干多少事。

  • 1G移动光标到第一行。
  • 20l右移20个字符。
  • ^跳到当前行第一个字符。
  • $跳到当前行最后一个字符。
  • G跳到最后一行。

如果你想要跳到当前窗口的中央呢?

  • 按H跳到当前窗口最高的地方(’h’igh,第一行)
  • 按M跳到当前窗口的中央(’m’iddle)
  • 按L跳到当前窗口最低的地方(’l’ow,最后一行)

你一定已经领会到了,重点在于盲打,双手不离键盘。这可是件好事。

单词,句子,段落

我们已经知道了如何按行和按字符移动。但是,句子、段落、章节都是由单词构成的,那么,如何按词移动呢?即,以词为“移动单位”。

来看看第一个简单的样例:

The polar regions are of special interest, as they might contain ice.

首先,按下^置光标于首字符。

[T]he polar regions are of special interest, as they might contain ice.

留意到我们会用方括号标记光标的当前位置。

想移动到下一个单词(’w’ord)?按下w后光标会在单词’polar’的’p’上。

The [p]olar regions are of special interest, as they might contain ice.

那么怎样一次前进两个单词呢?只需在’w’前加个数字前缀即可,即2w

The polar regions [a]re of special interest, as they might contain ice.

同理,按e会移动到下一个单词的词尾(’e’nd)。

The polar regions ar[e] of special interest, as they might contain ice.

b后退(’b’ackward)一个单词。加个数字,比如2b会后退两个单词。

The polar [r]egions are of special interest, as they might contain ice.

详情参见:help word-motions

学会了按字符和按词移动后,让我们来看看按句子移动。

[C]handrayaan-1 is India’s first mission to the moon. Launched by India’s national space agency the Indian Space Research Organisation (ISRO). The unmanned lunar exploration mission includes a lunar orbiter and an impactor. The spacecraft was launched by a modified version of the PSLV XL on 22 October 2008 from Satish Dhawan Space Centre, Sriharikota, Andhra Pradesh at 06:23 IST (00:52 UTC). The vehicle was successfully inserted into lunar orbit on 8 November 2008. The Moon Impact Probe was successfully impacted at the lunar south pole at 20:31 hours on 14 November 2008.

^置光标于首字符。

)移动到下一个句子。

Chandrayaan-1 is India’s first mission to the moon. [L]aunched by India’s national space agency the Indian Space Research Organisation (ISRO). The unmanned lunar exploration mission includes a lunar orbiter and an impactor. The spacecraft was launched by a modified version of the PSLV XL on 22 October 2008 from Satish Dhawan Space Centre, Sriharikota, Andhra Pradesh at 06:23 IST (00:52 UTC). The vehicle was successfully inserted into lunar orbit on 8 November 2008. The Moon Impact Probe was successfully impacted at the lunar south pole at 20:31 hours on 14 November 2008.

很酷吧。

(移动到上一个句子。

继续试试看。同理,在前面加上个数字3)可以一下子移动三个句子。

现在,试试按段落移动。按}移动到下一段,按{移动到上一段。

大括号移动的范围大一点。如果你已经注意到了,恭喜你,你已经可以像Vimmer一样思考了。

再强调一次,不要试图死记住这些键,养成一个习惯,你的手指头就自己记住这些键了。

详情参见:help cursor-motions

做标记

在编辑的时候,你忽然想起来需要修改同一个文档的另一个地方,但又想记住当前的位置,以便稍后再回来编辑。应该怎么做呢?

正常情况下,这意味着要移动到那个位置,编辑,然后再移回来。这样很费事,也容易忘记刚才所在的位置。

Vim有更聪明的办法。移动光标到下述文本的第5行(John Lennon的名言)。用ma创建一个名为’a’的标记。移动光标到任一地方,比如,4j

I am eagerly awaiting my next disappointment. —Ashleigh Brilliant

Every man’s memory is his private literature. —Aldous Huxley

Life is what happens to you while you’re busy making other plans. —John Lennon

Life is really simple, but we insist on making it complicated. —Confucius

Do not dwell in the past, do not dream of the future, concentrate the mind on the present moment. —Buddha

The more decisions that you are forced to make alone, the more you are aware of your freedom to choose. —Thornton Wilder

按下'a(即,单引号加上标记的名字),瞧,Vim跳到了刚才做标记的那一行的行首。如果要跳到做标记的位置,按下`a(即`,上排数字键1左边那个键)。

可以使用任一字母(a-zA-Z)去命名一个标记,意味着一个文件里最多可以有52个命名标记。

跳转

在我们学过的各种移动中,我们常常需要跳回到上一个位置,或者下一个位置。ctrl-o用来跳转到上一个位置,ctrl-i用来再跳回到下一个位置。

选取文本片段

Vim里有很多办法来选择一段文本对象,再传递给一个命令。例如,可以可视化地选择一段文本,再使用~键把文本在大小写之间转换。

打开在上一章中创建的dapping.txt文件。使用任一方式把光标移动到第二段中单词’dapper’的首字母上。提示:使用}, j, w

Dapping means being determined about being determined and being passionate about being passionate.

Be a dapper.

按下v进入可视模式,按下ap选取一段(’a’ ‘p’aragraph)。按下~翻转这段文字的大小写。如果你想取消选取,按下<Esc>即可。

Dapping means being determined about being determined and being passionate about being passionate.

bE A DAPPER.

其他的文本对象的助记符有:aw的意思是一个单词(’a’ ‘w’ord),a"的意思是一段引用(比如”this is a quoted string”),ab的意思是一块文本(’a’ ‘b’lock,小括号里的所有东西)等等。

详情参见:help object-motions:help text-objects

小节

我们已经领教到了Vim里移动光标的各种方式。最重要的不是记住每一种方法,而是养成使用它们的习惯,特别是和你最相关的方法。当养成一个习惯后,打起字来省时省力,也更快。最终,你就可以把时间都用在构思上,而不是如何去用编辑器。

更多有趣的移动方式请参见:help various-motions:help motion


Advertisements