本文共 2655 字,大约阅读时间需要 8 分钟。
vi快捷方式
学习需要花费一些精力,但是有经验的vi用户知道一段时间后,使用基本命令已成为第二习惯。 这是所谓的肌肉记忆的一种形式,在这种情况下,很可能称为手指记忆 。
掌握了主要的方法和基本命令后,您可以使用vi的自定义选项来创建快捷方式,从而使vi的编辑功能更加强大和简化。 我希望以下所述的技术将有助于您的编写,编程和数据操作。
在继续之前,我要感谢Chris Hermansen(邀请我写这篇文章)与一起检查了我的草稿,因为我使用了其他版本的vi。 我也感谢Chris的有用建议,这些建议已在此处纳入。
首先,让我们回顾一些约定。 我将使用<RET>指定按RETURN或ENTER键,并按<SP>表示空格键。 CTRL- x表示同时按下Control键和x键(无论x碰巧是什么)。
使用map
命令设置您自己的命令缩写。 我的第一个示例涉及write
命令,该命令用于保存您正在处理的文件的当前状态:
:w
这只是三个按键,但是由于我经常这样做,所以我宁愿只使用一次。 我为此选择的键是逗号,它不是标准vi命令集的一部分。 设置的命令是:
:map , :wCTRL-v
CTRL-v是必不可少的,因为如果没有它,<RET>将会表示映射结束,并且我们想将<RET>作为映射逗号的一部分。 通常,CTRL-v用于输入后面的击键(或控制字符),而不是按字面意义进行解释。
在上面的地图中,右侧的部分将在屏幕上显示为:w^M
脱字号( ^
)表示控制字符,在本例中为CTRL-m,它是系统的<RET>形式。
到目前为止,还不错。 如果在创建和/或编辑当前文件时将其写入大约十二次,则此映射可以节省2 x 12次按键。 但这不考虑设置地图所需的击键,在上面的示例中为11(计算CTRL-v和移动字符:
每个击键一次)。 即使有一定的节省,每次启动vi会话时都要设置地图还是很麻烦的。
幸运的是,有一种方法可以将映射和其他缩写放入启动文件中,vi每次调用时都会读取该文件: .exrc
文件,或者在Vim中, .vimrc
文件。 只需在主目录中创建一个包含地图列表的文件,每行一个地图(不包含冒号),然后为所有后续vi会话定义缩写,直到您删除或更改它。
在继续进行map
命令的变体和另一种缩写方法之前,下面是一些我发现对简化文本编辑有用的地图示例:
Displays as :map X :xCTRL-v:x^M or :map X ,:qCTRL-v ,:q^M
上面的等效映射写入并退出(退出)文件。 :x
是为此的标准vi命令,第二个版本说明了先前定义的映射可以在后续映射中使用。
:map v :e:e
上面的命令开始将命令移动到另一个文件,同时保留在vi中; 使用此命令时,只需在“ v”后面加上文件名,后跟<RET>。
:map CTRL-vCTRL-e :e#CTRL-v :e #^M
此处的#
是“备用文件”的标准vi符号,表示最后使用的文件名,因此此快捷方式非常方便在两个文件之间来回切换。 这是我如何使用此示例:
map CTRL-vCTRL-r :!spell %>err &CTRL-v:!spell %>err&^M
(注:第一个CTRL-V在这两个例子中上述不需要在六某些版本)的:!
是一种运行外部(非vi)命令的方法。 在这种情况下( spell
), %
是表示当前文件的vi符号, >
会将拼写检查的输出重定向到名为err
的文件, &
表示在后台运行此文件,因此我可以在spell
继续进行编辑完成任务。 然后,我可以键入verr<RET>
(使用我之前的快捷键v
和err
)进入spell
命令标记的潜在错误文件,然后返回到我正在使用CTRL-e处理的文件。 第一次运行拼写检查后,我可以重复使用CTRL-r并仅使用CTRL-e返回到err
文件。
map
命令的一种变体可以用于在输入时缩写文本字符串。 例如,
:map! CTRL-o \fI :map! CTRL-k \fP
这将允许您使用CTRL-o作为输入groff
命令的斜体,以使后面的单词变为斜体,并且允许您将CTRL-k用于groff
命令恢复为先前的字体。
这是此技术的另外两个示例:
:map! rh rhinoceros :map! hi hippopotamus
可以使用ab
命令来完成上述操作,如下所示(如果按顺序尝试使用这些命令,请先使用unmap! rh
和umap! hi
):
:ab rh rhinoceros :ab hi hippopotamus
在map!
在上述方法中,键入时(在Vim中)缩写词立即扩展为定义的单词,而在使用ab
方法时,缩写词后跟空格或标点符号(在Vim和我的vi版本中,扩展对于map!
方法也是如此。
要反转任何map
,请map!
,或在vi会话中使用ab
,请使用:unmap
, :unmap!
或:unab
。
在我的vi版本中,可以很好地映射的未定义字母包括g , K , q , v , V和Z ; 未定义的控制字符为CTRL-a,CTRL-c,CTRL-k,CTRL-n,CTRL-o,CTRL-p和CTRL-x; 其他一些未定义的字符是#
和*
。 您也可以重新定义在vi中具有含义但认为模糊且很少使用的字符; 例如,我在本文的两个示例中选择的X是一个内置的vi命令,用于删除当前字符紧靠左侧的字符(可通过两键命令hx
轻松完成)。
最后,命令
:map:map! :ab
将显示所有当前定义的映射和缩写。
我希望所有这些技巧都可以帮助您自定义vi,并使其更容易,更高效地使用。
翻译自:
vi快捷方式
转载地址:http://hwnzd.baihongyu.com/