📄 usr_03.cnx
字号:
*usr_03.txt* For Vim version 6.3. 最后修改:2004年6 VIM 用户手册 - by Bram Moolenaar (译者:Nek_in http://vimcdoc.sf.net) 移动在你插入或者删除之前,你需要移动到合适的位置。Vim 有一大堆命令可以移动光标。本章向你介绍最重要的那些。你可以在 |Q_lr| 下面找到这些命令的列表。|03.1| 词移动|03.2| 移动到行首或行尾|03.3| 移动到指定的字符|03.4| 括号匹配|03.5| 移动到指定的行|03.6| 确定当前位置|03.7| 滚屏|03.8| 简单查找|03.9| 简单的查找模式|03.10| 使用标记 下一章:|usr_04.txt| 做小改动 前一章:|usr_02.txt| Vim 初步 目录:|usr_toc.txt|==============================================================================*03.1* 词移动要移动光标向前跳一个词,可以使用 "w" 命令。象大多数 Vim 命令一样,你可以在命令前加数字前缀表示把这个命令重复多次。例如,"3w" 表示向前移动3个单词。用图表示如下:> This is a line with example text ~ --->-->->-----------------> w w w 3w<要注意的是,如果光标已经在一个单词的词首,"w" 移动到下一个单词的词首。 "b" 命令向后移动到前一个词的词首: This is a line with example text ~ <----<--<-<---------<--- b b b 2b b还有一个 "e" 命令可以移到下一个单词的词末,而 "ge" 则移动到前一个单词的末尾: This is a line with example text ~ <- <--- -----> ----> ge ge e e如果你在一行的最后一个单词,"w" 命令将把你带到下一行的第一个单词。这样你可以用这个命令在一段中移动,这比使用 "l" 要快得多。"b" 则在反方向完成这个功能。一个词以非单词字符结尾,例如 ".","-" 或者 ")"。要改变 Vim 使用的 "分词符",请参见 'iskeyword' 选项。 还可以以 "空白字符" 分割的 "大单词" 移动。这不是我们通常意义的 "单词”。这就是为什么称之为 "大单词" 的原因。如下图所示: ge b w e <- <- ---> ---> This is-a line, with special/separated/words (and some more). ~ <----- <----- --------------------> -----> gE B W E ge b w e组合运用这些大写和小写的命令,你可以很快地在一段中前后移动。==============================================================================*03.2* 移动到行首或行尾"$" 命令把光标移动到当前行行尾。如果你的键盘上有 <End> 键,也可以完成相同的功能。"^" 命令把光标移动到当前行的第一个非空字符,而 "0" 命令则移到一行的第一个字符,<Home> 键也可以完成相同的功能。图示如下: ^ <------------ .....This is a line with example text ~ <----------------- ---------------> 0 $(这里 "....." 表示空白字符) 象大多数移动命令一样,"$" 命令接受个次数前缀。但是 "移动到一行的行尾n次" 没有什么意义,所以它会使光标移动到另一行。例如,"1$" 移动到当前行的行尾,而"2$" 则移动到下一行的行尾,如此类推。 "0" 命令不能加个数前缀,因为 "0" 本身就是个数字。而且,出人意料地是,"^" 命令也不支持数字前缀。==============================================================================*03.3* 移动到一个指定的字符单字符查找命令是最有用的移动命令之一。"fx" 命令向前查找本行中的字符 x。提示:"f" 表示 "Find"。 例如,假定你在下面例子行的行首,而你想移动到单词 "human" 的h那里。只要执行命令 "fh" 即可: To err is human. To really foul up you need a computer. ~ ---------->---------------> fh fy这个例子还演示了用 "fy" 命令移动到 "really" 的词尾。 你可以在这个命令前面加数字前缀,所以,你可以用 "3fl" 命令移动到 "foul" 的"l": To err is human. To really foul up you need a computer. ~ ---------------------> 3fl"F" 命令用于向左查找: To err is human. To really foul up you need a computer. ~ <--------------------- Fh"tx" 命令与 "fx" 相似,但它只把光标移动到目标字符的前一个字符上。提示:"t"表示 "To"。这个命令的反向版本是 "Tx"。 To err is human. To really foul up you need a computer. ~ <------------ -------------> Th tn这四个命令可以通过 ";" 命令重复,"," 命令则用于反向重复。无论用哪个命令,光标永远都不会移出当前行,哪怕是这两行是连续的一个句子。有时你启动了一个查找命令后才发现自己执行了一个错误的命令。例如,你启动了一个"f" 命令后才发现你本来想用的是 "F"。要放弃这个查找,输入 <Esc>。所以"f<Esc>" 取消一个向前查找命令而不做任何操作。 Note: <Esc> 可以中止大部分命令,而不仅仅是查找。==============================================================================*03.4* 括号匹配当你写程序的时候,你经常会遇到嵌套的()结构。这时,"%" 是一个非常方便的命令了:它能匹配一对括号。如果光标在 "(" 上,它移动到对应的 ")" 上,反之,如果它在")" 上,它移动到 "(" 上。 % <-----> if (a == (b * c) / d) ~ <----------------> %这个命令也可适用于 [] 和 {}。(可用'matchpairs'选项定义)当光标不在一个有用的字符上,"%" 会先向前找到一个。比如当光标停留在上例中的行首时,"%" 会向前查找到第一个 "("。然后会移动到它的匹配处。 if (a == (b * c) / d) ~ ---+----------------> %===============================================================================*03.5* 移动到指定的行如果你是一个 C 或者 C++ 程序员,你对下面这样的错误信息应该非常熟悉: prog.c:33: j undeclared (first use in this function) ~这表示你可能要移动到 33 行去作一些修改了。那么怎样找到 33 行?一个办法是执行"9999k" 命令移到文件头,再执行 "32j" 下移到32行。这不是一个好办法,但肯定有效。更好的方法是使用 "G" 命令。加上一个次数前缀,这个命令可以把你送到指定的行。例如,"33G" 把你送到 33 行。(要用更好的方法在编译器的错误列表中移动,参见|usr_30.txt| 的 ":make" 命令部分。) 如果没有数字前缀,"G" 命令把光标移动到文末。移动到文首的命令是 "gg"。"1G"也能完成这个功能,但稍复杂一点。 | first line of a file ^ | text text text text | | text text text text | gg 7G | text text text text | | text text text text | text text text text V text text text text | text text text text | G text text text text | last line of a file V另一个定位行的方法是使用带数字前缀的 "%" 命令。例如,"50%" 移动到文件的中间,而 "90%" 移到差不多结尾的位置。前面的描述假定你想移动到文件中的某一行,而不在乎它是否可见。那么如何移动到视野之内的一行呢?下图演示了三个可以使用的命令: +---------------------------+ H --> | text sample text | | sample text | | text sample text | | sample text | M --> | text sample text | | sample text | | text sample text | | sample text | L --> | text sample text | +---------------------------+提示:"H" 表示 "Home","M" 表示 "Middle" 而 "L" 表示 "Last"。==============================================================================*03.6* 确定当前位置要确定你在文件中的位置,有三种方法:1. 使用 CTRL-G 命令,你会获得如下消息(假定 'ruler' 选项已经被关闭): "usr_03.txt" line 233 of 650 --35%-- col 45-52~ 这里显示了你正在编辑的文件的名称,你所处的当前行的行号,全文的总行数,光标 以前的行占全文的百分比,和你所处的列的列号。 有时你会看到一个分开的两个列号。例如,"col 2-9"。这表示光标处于第二个字符 上,但由于使用了制表符,在屏幕上的位置是 9。2. 设置 'number' 选项。这会在每行的前面加上一个行号:> :set number< 要重新关闭这个选项:> :set nonumber< 由于'number'是一个布尔类型的选项,在它前面加上 "no" 表示关闭它。布尔选项只会 有两个值,on 或者 off。 Vim 有很多选项,除了布尔类型的,还有数字或者字符串类型的。在用到的时候会给 处一些例子的。3. 设置 'ruler' 选项。这会在 Vim 窗口的右下角显示当前光标的位置:> :set ruler<使用 'ruler' 的好处是它不占多少地方,从而可以留下更多的地方给你的文本。=================================================================================*03.7* 滚屏CTRL-U 命令向下滚动半屏。想象一下通过一个视口看着你的文本,然后把这个视口向上移动该视口的一半高度。这样,窗口移动到当前文字的上面,而文字则移到窗口的下面。不用担心记不住那边是上。很多人都是这样。 CTRL-D命令把视窗向下移动半屏,所以把文字向上移动半屏。> +----------------+ | some text | | some text | | some text | +---------------+ | some text | | some text | CTRL-U --> | | | | | 123456 | | 123456 | +----------------+ | 7890 | | | +----------------+ | example | CTRL-D --> | 7890 | +---------------+ | | | example | | example | | example | | example | +----------------+每次滚一行的命令是 CTRL-E(上滚)和 CTRL-Y(下滚)。可以把 CTRL-E 想象为是多给你一行(one line Extra)。向前滚动一整屏的命令是 CTRL-F(实际上会留下两行不滚动)。反向的命令是 CTRL-B。幸运地,CTRL-F 是向前 (forward) 滚动,CTRL-B 是向后 (backward) 滚动,这比较好记。移动中的一个常见问题是,当你用 "j" 向下移动的时候,你的光标会处于屏幕的底部,你可能希望,光标所在行处于屏幕的中间。这可以通过 "zz" 命令实现。> +------------------+ +------------------+ | some text | | some text | | some text | | some text | | some text | | some text | | some text | zz --> | line with cursor | | some text | | some text | | some text | | some text | | line with cursor | | some text | +------------------+ +------------------+<"zt" 把光标所在行移动到屏幕的顶部,而 "zb" 则移动到屏幕的底部。Vim 中还有另外一些用于滚动的命令,可以参见|Q_sc|。要使光标上下总保留有几行处于视口中用作上下文,可以使用'scrolloff'选项。==============================================================================*03.8* 简单查找查找命令是 "/String"。例如,要查找单词 "include",使用如下命令: > /include
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -