玩转VIM编辑器-导航移动

跳转至文件的第N个字符、N%

导航键

描述

50%

跳转至文件的50%处,即文件中间

75%

跳转至文件的75%处,即3/4

100l

跳转至从当前位置开始计算的第100个字符

100<space>

跳转至从当前字符开始计算的第100个空格处,与上述100l含义相同

:goto 25

移动至从文件开始处的第25个字符

25 |

移动到当前行的第25个字符

显示当前行数

命令

描述

:set number

:set nu

显示行数

:set nonumber

:set nonu

不显示行数

:set numberwidth=10

行数显示默认宽度为4个字符,我们可以通过该命令来设为10个字符。

跳转至特定行

导航键

描述

:50

跳转至50方法1

50gg

跳转至50方法2

50G

跳转至50方法3

源码导航

      下面的几个对与经常写程序源码的或者写shell脚本的系统管理员比较有用。

导航键

描述

%

跳转至匹配对,可以是()、{}或者[]

[(

跳转至前一个没有匹配的(

[)

跳转至前一个没有匹配的)

[{

跳转至前一个没有匹配的{

[}

跳转至前一个没有匹配的}

在插入状态移动光标

      在常规状态下,我们可以通过wW来在word中移动光标,但是一旦进入了插入模式,就不能使用这两个导航键了,但是我们也不需要退出插入模式,然后在使用w导航,我们可以使用SHIFT+方向键来快速移动。

使用CTRL+OCTRL+L跳转

      Vim会保存我们在其中的所有导航操作到一个列表,我们可以使用:jumps来查看该列表,同时可以使用下述导航键来进行跳转。

CTRL+O

跳转至前一个记录点

CTRL+L

跳转至后一个记录点

5CTRL+O

跳转至当前记录点的前5

5CTRL+L

跳转至当前记录点的后5

在很长的一行中导航

      我们知道一般终端的每一行都会有个字数限制,如果一行的字符数超过了这个限制,就会自动跳转到下一行,比如实际的一行可能你看起来是56行的样子,那么这个时候你如果使用jk那么就有种跳转了N行的假象。在这种情况下,如果在视觉情况下,跳转到下一行(其实是同一行),使用下述导航键。

导航键

描述

gj

视觉中的下一行

gk

视觉中的上一行

g^

当前视觉行的行首

g$

当前视觉行的行尾

gm

当前视觉行的中间

Vim命令行导航

      在我们使用vim打开文件的时候,就可以按照自己的需要跳转到指定的位置。

命令行

描述

vim +143 <filename>

打开文件filename,并跳转到143

vim +/search-term <filename>

打开文件filename,并跳转到从文件头开始的第一个符合条件的位置

vim +?search-term <filename>

打开文件filename,并跳转到从文件尾开始的第一个符合条件的位置

vim –t TAG

跳转到一个特定的TAG

使用标记创建本地书签

      有两种书签,本地书签和全局书签,区别在于本地使用小写字母,全局使用大写字母。

书签命令

描述

ma

在光标位置创建书签a

`a

跳转到书签a的精确位置

‘a

跳转到书签a所在行的行首

创建全局书签

      ma改为mA就可以创建全局书签A

      这个主要用在当我们打开多个文件的时候,创建全局书签可以方便的在各个文件中跳转。

显示所有的书签

可以使用命令:marks来显示所有的书签。我们会发现不过什么时候打开所有书签,都会有’, ”[ ,].。这几个都是默认的书签,有特殊的含义。

默认书签

描述

`”

退出前最后编辑的位置

`[

上次修改或者复制的第一个字符

`]

上次修改或者复制的最后一个字符

`<

上次visual区域的第一行

`>

上次visual区域的最后一行

`.

最后一次修改的位置

`^

最后一次插入模式停止的位置

还可以使用:marks a来显示所有关于书签a的详细信息。

使用ctags来有效地在源码中跳转

1.     当然使用之前,需要先行安装ctags包;

2.     在源码文件夹中,使用ctags *.c来生成一个文件名为tags的信息tags文件;

3.     然后vim main.c 后,输入:ta main就可以直接跳转到mian定义处,

4.     也可以使用CTRL+]来跳转到函数的定义处,使用它CTRL+T返回到原文件;

5.     还可以使用它:ta *然后按tab来便利需要查询的函数;

Vim命令

描述

:ts

显示所有的tag

:tn

跳转到列表中的下一个tag

:tp

跳转到列表中的前一个tag

:tf

跳转到列表中的第一个tag

:tl

跳转到列表中的最后一个tag

vim变为很有魅力的源码浏览器

安装taglish插件,详细信息可以参考安装taglish文章。

例如打开文件vim main.c,然后输入:TlistOpen就可以列出所有的tag信息;

对特定的函数或变量回车,就可以看到更详细的信息;

当然,tag窗口也是一个vim session,我们可以通过跳转到下一个session的方法,回到tag窗口。

Vi移动命令的复习

移动

命令

往前滚动一整屏

^F

往后滚动一整屏

^B

往前滚动半屏

^D

往后滚动半屏

^U

往前滚动一行

^E

往后滚动一行

^Y

将当前行移到屏幕顶端并滚动屏幕

z ENTER

将当前行移到屏幕中心并滚动屏幕

z .

将当前行移到屏幕底端并滚动屏幕

z –

重画屏幕

^L

移到home位置(屏幕的顶端)

H

移到屏幕中间那一行

M

移到屏幕的底端

L

移到下一行的第一个字符

ENTER

移到下一行的第一个字符

+

移到上一行的第一个字符

移到当前行的第一个非空格字符

^

移到当前行的第n个字符

n|

移到单词的结尾

e

移到单词的结尾,忽略标点符号

E

移到当前句子的开头

(

移到下一个句子的开头

)

移到当前这一段的开头

{

移到下一段的开头

}

移到当前这一节的开头

[[

移到下一节的开头

]]

往前搜索模式

/pattern

往后搜索模式

?pattern

往同一个方向重复搜索

n

往相反方向重复搜索

N

往前重复搜索

/

往后重复搜索

?

搜索当前行中下一个出现x的位置

fx

搜索当前行中上一个出现x的位置

Fx

搜索当前行中下一个出现x的位置的前一个字符

tx

搜索当前行中上一个出现x的位置的后一个字符

Tx

重复上一个搜索命令,方向相同

;

重复上一个搜索命令,方向相反

,

转至第n

nG

转至文件结尾

G

回到上一个记号或上下文

回到包含上一个记号的行的开头处

‘’

显示当前的行号,不是移动命令

^G