我有诗的文本文件,右侧的行号如下所示:
Bedded in store of rotten fig-leaves soft, 40
And corded up in a tight olive-frail,
Some lump, ah God, of lapis lazuli,
Big as a Jew’s head cut off at the nape,
Blue as a vein o’er the Madonna’s breast
Sons, all have I bequeathed you, villas, all, 45
Run Code Online (Sandbox Code Playgroud)
行尾空格与行号不一致的地方。如何将数字移动到特定列,以便它们对齐?
解决 vim 问题的一个强大方法是使用宏和基本命令,因为它们比 vim 脚本语言更容易记住。
在这种情况下,我会将光标放在数字之前,数字是该行中的最后一个单词(为此:)$b;插入大量空格;删除无关的(如果你想使用第 61 行,请执行:)061ldw;转到下一行(执行此操作:)j。
您首先按qa开始录制宏“a”,然后按上面的这些键(而不是其他键),然后按q完成录制。现在要使用它,请使用@afor 宏“a”;之后,继续按@@(重复上一个宏),直到到达文本末尾。
小智 6
我想实现基本相同,但对于软件代码中的某些字符。字符可以出现在行上的任何位置,但我希望它们(以及它们右侧的任何内容)出现在特定列上。例如:
refclkp : in std_logic;
refclkn : in std_logic;
hdinp_ch0 : in std_logic;
hdinn_ch0 : in std_logic;
hdoutp_ch0 : out std_logic;
Run Code Online (Sandbox Code Playgroud)
我希望它看起来像这样:
refclkp : in std_logic;
refclkn : in std_logic;
hdinp_ch0 : in std_logic;
hdinn_ch0 : in std_logic;
hdoutp_ch0 : out std_logic;
Run Code Online (Sandbox Code Playgroud)
即:在特定列(在本例中为第 30 列)上的所有 。以上对我来说没有意义(它可能有效,但我不使用视觉内容)但它确实给了我解决它的线索:
:map H $?:<ctrl+Enter>Di <ctrl+Esc>029lP:s/\s*$//<ctrl+Enter>
Run Code Online (Sandbox Code Playgroud)
您可以通过按住+然后点击或 来完成<ctrl+Enter>和<ctrl+Esc>位。它在命令中显示为或。以上基本上是这样做的:CtrlQEnterEsc^M^[
$)?:<ctrl+Enter>)D)i <ctrl+Esc>)029l)P) 中删除的文本:s/\s*$//<ctrl+Enter>) 中创建的所有尾随空格进行清理我将其创建为映射,因此我现在需要做的就是点击H并修改当前行!