vim中的移动操作

工作中用vim是不可避免了,作为一个vim菜鸟,必须要尽快熟悉起来

首先是vim中的移动

 

以word为单位的移动:

很多教程上都说什么w是移动到下一个字符的首字符,b是移动到前一个字符的首字符,或者如果光标当前在一个word上的话,就移动到当前word的首字符

其实完全没必要解释的这么麻烦,以下是个人理解:

可以把word的首尾字符各看做一个锚点,各个以单词为单位的移动命令,都是移动到下一个这样的锚点,管它当前word还是下一个word还是前一个word

 

通常意义上的word(以. , -等分隔):

w:word,移动到下一个首字符

b:backword,前一个首字符

e:end of backword,下一个尾字符

ge:前一个尾字符

 

以空白分隔的WORD:

W:移动到下一个首字符

B:移动到前一个首字符

E:移动到下一个尾字符

gE:移动到前一个尾字符

 

 

行首行尾

0:当前行第一个字符

$:当前最后一个字符

^:当前行第一个非空白字符(发现“_”貌似也可以)

g_:当前行最后一个非空白字符

 

 

指定字符

fx:在当前行查找(find)下一个字符x

Fx:前一个字符x

tx:To,类似fx,只是光标停留在x前一个字符

Tx:tx反方向版

 

 

括号匹配

%,很简单

 

 

指定行

gg:移动至第一行

G:移动至最后一行

nG:移动(Go)至第n行,":n"也有同样效果

n%:移动至文件百分之n的位置

H(Home)、M(Middle)、L(Last):屏幕的第一行、中间一行、最后一行

 

 

当前位置

CTRL-G:显示行信息

line 68 of 991 --6%-- col 4-11

当前第68行,文件共991行,当前位于文件6%的位置,光标实际位于第4个字符的位置,但屏幕上看起来是第11个字符的位置(制表符占了屏幕上8个字符的位置导致的)

:set number, :set nonumber:开关行号

:set ruler, :set noruler:开关右下显示当前光标位置

 

 

滚屏

Crtrl-U:显示文本的窗口向上滚半屏,效果是文字向下滚了,以下类似

Ctrl-D:向下滚半屏

Ctrl-E:Extra,向上滚动一行

Ctrl-Y:向下滚动一行

Ctrl-F:向下(前,forward)滚动一整屏(其实比一整屏少了两行)

Ctrl-B:向上(后,backward)滚动一整屏

zz zt zb分别将当前行置为屏幕中央、屏幕顶端、屏幕底端

(z字取其象形意义模拟一张纸的折叠及变形位置重置,广泛用作折叠累命令的前缀)

 

 

简单搜索

.*[]^%/?~$有特殊意义,需要用/转义

/ ?分别为向前向后搜索

n N重复向前或向后搜索

:set ignorecase :set noignorecase 大小写敏感设置

* # 向前向后搜索当前光标下的wordg* g#

\< \>分别表示word的开始与结束(* #在内部使用了这些标记, g* g#则不使用)

:set hlsearch :set nohlsearch是否开始高亮显示搜索结果

:hlsearch :nohlsearch 仅对当前搜索有效

:set insearch :set noinsearch在键入搜索字符串时是否立即开始搜索

:set wrapscan  :set nowrapscan 是否循环搜索

 

 

搜索模式

 ^$ 一行的开头与结尾

. 匹配任何单字符

\ 转义匹配特殊字符

 

 

标记

``跳回刚才的出发点

什么叫跳转?执行一个命令,使光标定位于当前行之外的某行上,就叫一个跳转。包括“/”、“n”这些搜索命令。但是fx tx 或者以word为单位的移动光标位置的命令w e等不叫跳转。j k等命令也不是跳转,即使在它们之前加了命令计数。

Ctrl-O Ctrl-I跳转到之前或之后的位置

:jumps 列出曾经跳转过的位置列表,最后一个跳转的位置被一个“>”标记

ma 将当前光标下的位置标记为“a” (可标记a-z)

`a 跳转到a标记定义的行和列

'a 跳转到a标记定义的行首

:marks 查看关于标记的列表

一些特殊标记:

' 进行此次跳转之前的起跳点

" 上次编辑该文件时光标最后停留的位置

[ 最后一次修改的起始位置

] 最后一次修改的结束位置

 

 

简单做下记录,关键还是在于实践

 

posted @ 2012-05-30 00:00  wallenwang  阅读(989)  评论(0)    收藏  举报