资源描述
VIM 快速键入命令行命令*20.1* 命令行编辑 当你用冒号(:)命令或用/或?搜索一个字符串时,Vim就会把光标置于屏 幕下方。你在那儿键入命令或者搜索模式。此处即称为命令行,也是用来输入搜索命令的 地方。最为显而易见的编辑命令的方法是按 退格键。按下此键即删去光标前面的 字符。如果要删去另一个更早键入的字符,得先用光标方向键把光标移到那儿。例如,你键入了:s/col/pig/在你按下回车键之前,你注意到col应为cow。为了纠正这个错误,你按 五次 键。现在,光标正好在 col 后面。按 键,然后键入正确的字符 w:s/cow/pig/现在你可以立刻按 键了。在执行这个命令之前,你无须先把光标移到 命令行的末尾。命令行上移动光标时最常用的键:左移一个字符 右移一个字符 左移一个单词 右移一个单词 命令行行首 命令行行尾 或 或 CTRL-B 或 CTRL-E 或 备注: (光标左移键和Shift键同时按下)和 (光标左移 键和Control 键同时按下) 并非在所有键盘上都有效。其它 Shift 和 Control 组合键也是这种情况。你也可以用鼠标来移动光标。删除如前所述,BS键删除光标前一个字符。删除光标前整个单词,则用CTRL-W。/the fine pigCTRL-W/the fineCTRL-U 删除命令行上全部文字,从而让你从头开始。替换插入键 Insert 让你在插入字符和替换字符两种方式之间切换。先键入如下文 字:/the fine pig再按两次S-Left (或S-Left无效时按八次Left),把光标移到fine 起始处。现在,按插入键Inser t,切换到替换方式,并键入grea t:/the greatpig哟,空格没了。现在,别用BS键,因为那会删除t(这跟插入方式不同)。 此时应该按插入键Insert,从替换方式切换到插入方式,并键入空格:/the great pig取消你本想执行一个 : 或 / 命令,但却改变了主意。要清除命令行上你已经键入的 文字却不执行该命令,按 CTRL-C 或 Esc。备注: 是普遍采用的 退出 键。不幸的是,在过去美好的 Vi 版本里,在命令行上按 却是执行命令!由于那会被认为是程序 bug,Vim 采用 来取消命令。但其 cpoptions 选项可以使 Vim 跟 Vi 兼容。而且,使 用映射时( 那可能是为 Vi 而写的 ) , 键也总和 Vi 兼容。由此看来,采用 CTRL-C倒不失为一种永远奏效的方法。如果你在命令行开始处,那么按 将取消整个命令。这就像删除命令行赖以 开始的 一p- /: 或 /。有命令:funny,否则简称:fun也会令人迷惑。) 在 Vim 脚本里你最好用命令全称。当你日后改编脚本时,全称读起来比较容易。 除非那是一些常用命令如 :w (:write) 和 :r (:read)。一个特别令人迷惑的缩写是:end,它可以指:endif, :endwhile或 :endfunc tion。所以,遇到这类命令时,最好永远采用全称。选项简称在用户手册里,我们采用选项的全称。许多选项还有简称。跟 : 冒号命令不 一样,有效的选项简称只有一个。例如,autoindent的简称是ai。因而下面两个命 令完成同样的动作:set autoindent:set ai你可以从这儿找到完整的选项全称和简称的列表:|option-list|。其结果是同样的命令。这是怎么回事?制表键 会补全光标前的词。在本 例中就是b。Vim在目录中寻找并找到了唯一的一个以b开头的文件。那个文件想必 是你寻找的,因此 Vim 为你补全了文件名。现在键入:edit iVim 会鸣起响铃,并给你这个结果:edit info.txt响铃的意思是 Vim 找到了不止一个匹配。然后它使用了找到的第一个匹配 (按 字母顺序)。如果你再按一次,你得到::edit intro.txt这样,如果第一次 没给你你要找的文件,你就再按一次。如果还有匹配 的文件,你将会看到它们每一个,每按一次,就看到一个。如果你在最后一个匹配文件名上按,你将会再次看到你起初键入的那 个命令:edit i然后一切再从头开始。这样, Vim 就在匹配列表内周而复始地循环。使用 CTRL-P 依相反方向循环匹配列表: +| - -:edit i:edit info.txt:editintro.txt- CTRL-P上下文当你键入:set i而不是:edit i,并按,你得到的是::set icon嗨,为什么你没得到:set info. txt?这是由于Vim的补全功能是上下文相 关的。Vim寻找的那类词取决于关键词前面的命令。Vim知道你不可能在命令:set 后面用一个文件名,但却可以用一个选项名。同样,如果你重复键入 , Vim 就会在所有匹配间周而复始地循环。你 最好开始 时多键入几个字符,否则匹配的选项会很多:set isk幺士里早.结果是:set iskeyword现在键入 = 并按 :set iskeyword=,48-57,_,192-255在此, Vim 插入的是该选项原来的设定值。现在你可以编辑它了。按 键补全的乃是 Vim 在命令行那个位置上所期待的。你不妨试试, 看它究竟是如何补全的。在某些情形下你会得不到你想要的结果。那或者因为 Vim 不知 道你要什么,或者因为 Vim 还没有为该情况实现补全功能。在那个场合,你的 就 会被当作字符插入文本(显示为J)。匹配列表当匹配有很多时,你可能希望看到一个总览。要看匹配总览,请按CTRL-D。例 如,你键入了以下命令以后按 CTRL-D:set is结果:set isisident iskeyword isprintincsearch isfname:set isVim 列出了匹配,然后又伴随着你早先键入的命令回到命令行。你现在可以检验 匹配列表,找你想要的选项了。如果它不在列表中,你可以用 修正那个词。如果 匹配太多了,就在按 键补全命令之前再多打几个字符。 如果你仔细观察了,你就会注意到选项 incsearch 不是以 is 开头。在 这个场合,is指的就是incsearch的简称。(许多选项都有其简称和全称。)Vim 知道你可能要把选项的简称扩展成全称,够聪明的吧。更多选项命令 CTRL-L 把词补全为最长无歧义字符串。如果你键入 :edit i 而目录内 存放着文件info. txt 和 info_backup. txt,那么,你将得到:edit info。选项 wildmode 可用来改变补全时采用的方式。选项 wildmenu 可用来取得菜单式的匹配列表。利用选项 suffixes 来指定一些不太重要的文件,并让它们出现在文件列表末 尾。选项 wildignore 指定一些根本用不着表列的文件。欲知更多此类选项详情,参见:|cmdline-comple ti on|Icmdline-history| 假定你完成了一个 :set 命令,又键入了十个冒号命令,然后要再次执行那个 .:set命令。你本可以按一个:,然后按十次Up。更快捷的方法是::se你现在就回到以前执行过的,以 se 开头的命令。没准儿那就是你想找的 :set 命令。至少你不至于按很多 键 (除非你执行的都是 :set 命令)。 键用你在命令行上已经键入的文本去跟历史记录里的命令作比较。只有匹 配的命令才被显示出来。如果你没找到你要找的命令,用 回到你键入的文本作修改。或者用 CTRL-U 从头来过。显示历史记录里所有的命令:history那是 : 冒号命令的历史记录。搜索历史记录用这个命令来显示:history /如果你不愿用光标方向键, CTRL-P 作用就跟 一样。而 CTRL-N 跟 一样。CTRL-P 意指前一个 (previous), CTRL-N 意指下一个 (next)。q:Vim 现在就在屏幕底部打开了一个 (很小的) 窗口。它存放着命令行历史记录, 以及一行 空行在末尾:+|other window|file.txt=| |:e c|:e config.h.in|:set path=.,/usr/include,|:set iskeyword=,48-57,_,192-255 | |:set is|:q|:|command-line=| |+现在你处于普通模式下。你可以用 hjkl 键来移动光标。例如,用 5k 上移 至:e config.h.in 那一行。键入 $h 移到 in 的 i 字符上,并键入 . cwout。现在你把这一行改成了这样:e config.h.out现在按 执行这个命令。命令行窗口就关上了。按 键执行光标下的那个命令。这跟 Vim 处于插入模式抑或普通模式无 关。在命令行窗口内所作的修改不会被保存。它们不会导致历史记录被修改。唯 一例外就 是你执行的命令将被加到历史记录的末尾,跟所有执行过的命令一样。在你要总览历史记录时,命令行窗口十分有用,查找类似命令,修改一点点,然 后执行 它。一个搜索命令可用来寻找某些东西。在前面那个例子中,搜索命令 ?config 是可以用来寻找先前那个含有 config 的 命令的。这有点儿特别,因为你是在命令行窗口内用命令行作搜索。在键入搜索 命令时, 你打不开另一个命令行窗口,命令行窗口是唯一的。*20.2* 命令行缩写 有些 : 命令确实很长。我们已经提及替代命令 :substitute 可以被缩写成 :s。这是一个基本机理,即所有 : 冒号命令都可以被缩写。一个命令可以被缩写成多短呢?英文有 26 个字母,而 Vim 却有多得多的命令。 例如,:set也以:s开头,但:s不是启动:set命令的。:set可以被缩 写成:se。把一个命令缩写得更短即可能适用于两个命令,此时,该缩写仍然只能代表 其中的一 个。而选择哪个却没有任何逻辑,你不得不一个一个地记。最短的有效缩写形式 可以在帮助文件里找到。例如:substitute它的意思是替代命令:substitute的最短缩写形式是:s。随后的字符可以 任选。因此 :su 和 :sub 都有效。在用户手册里我们有时用命令的全称,有时简称意义明白就用简称。例如, :function可以缩写成:fu。但既然大多数读者不明其所指,所以我们采用简称:fun。(Vim 没*20.3* 命令行补全命令行补全是那些仅仅因为它就值得从 Vi 转到 Vim 的功能之一。一旦你用上 了这个功能,你就离不开它了。假定你有个文件目录,其中存放了这些文件:info.txtintro.txtbodyofthepaper.txt你用这个命令来编辑最后那个文件:edit bodyofthepaper.txt这很容易打错。一个快得多的方法是:edit b*20.4* 命令行历史 我们曾经在第三章简单提到过历史记录功能。其基本用法就是你可以用 键 调用较早的命令行。而 键则让你回到较晚的命令行。历史记录功能实际上共有四种。我们在这里要提到的是用于 : 冒号命令以及 用于 /和 ? 搜索命令的历史记录功能。 / 和 ? 命令共享同一历史记录。因为两 者同为搜索命令。另外两种历史记录功能用于函数 input() 的表达式和输入行。*20.5* 命令行窗口 在命令行上键入文本跟插入模式下键入文本有所不同。许多修改文本的命令都不 能用。对大多数命令而言,那问题不大,但有时你必须键入一个复杂的命令。那样的场合 用命令行窗口就非常有用了。用这个命令来打开命令行窗口:
展开阅读全文