我有诗歌的文本文件,其右侧有行号,如下所示:
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
行尾之间的间距和行号不一致。如何将数字移动到特定列,以便它们对齐?
答案1
解决 vim 问题的一个有效方法是使用宏和基本命令,因为它们比 vim 脚本语言更容易记住。
在这种情况下,我会将光标放在数字之前,即该行中的最后一个单词(执行以下操作$b
:);插入大量空格;删除多余的空格(如果要使用第 61 行,请执行以下操作061ldw
:);转到下一行(执行以下操作j
:)。
首先按下qa
开始录制宏“a”,然后按下上述这些键(不要按下其他键),然后按下q
完成录制。现在要使用它,请将其@a
用于宏“a”;之后,继续按下@@
(重复上一个宏),直到到达文本末尾。
答案2
我希望实现与软件代码中特定字符基本相同的功能。字符可以出现在行中的任何位置,但我希望它们(以及它们右侧的任何内容)出现在特定列中。例如:
refclkp : in std_logic;
refclkn : in std_logic;
hdinp_ch0 : in std_logic;
hdinn_ch0 : in std_logic;
hdoutp_ch0 : out std_logic;
我希望它看起来像这样:
refclkp : in std_logic;
refclkn : in std_logic;
hdinp_ch0 : in std_logic;
hdinn_ch0 : in std_logic;
hdoutp_ch0 : out std_logic;
即,将所有内容放在:
特定列上(在本例中为第 30 列)。上面的内容对我来说没有意义(它可能有效,但我不使用视觉内容),但它确实给了我解决问题的线索:
:map H $?:<ctrl+Enter>Di <ctrl+Esc>029lP:s/\s*$//<ctrl+Enter>
您可以通过按住+然后按或来执行<ctrl+Enter>
and位。它在命令中显示为或。上面的命令本质上是这样做的:<ctrl+Esc>
CtrlQEnterEsc^M
^[
- 转到行末 (
$
) - 向后查找第一个“:”(
?:<ctrl+Enter>
) - 删除从此处到行尾的所有内容 (
D
) - 插入 30 个空格 - 这样我就能知道有足够的空白可以让我跳转到第 30 列 (
i <ctrl+Esc>
) - 跳至第 30 列 - 不确定为什么我需要在这里使用“29”,肯定是一个“功能” (
029l
) - 粘贴步骤 3 中删除的文本(
P
) - 通过删除步骤 4 中创建的所有尾随空格来清理 (
:s/\s*$//<ctrl+Enter>
)
我将其创建为映射,所以我现在需要做的就是点击H并修改当前行!
答案3
这种列对齐的另一种方法是这样的:
让我们以上面的例子为例,
前 :
refclkp : in std_logic;
refclkn : in std_logic;
hdinp_ch0 : in std_logic;
hdinn_ch0 : in std_logic;
hdoutp_ch0 : out std_logic;
后 :
refclkp : in std_logic;
refclkn : in std_logic;
hdinp_ch0 : in std_logic;
hdinn_ch0 : in std_logic;
hdoutp_ch0 : out std_logic;
在这里我对齐了“:“字符位于第 15 列。请按照以下步骤操作:
转到第一行(我们需要开始更改的地方,这里是“refclkp:在 std_logic 中;“)
然后按下
<Esc>
键进入正常模式按下这些键
qa0f:i (Press the space bar more than 20 times)<Esc>15|dw<DownArrow>q
然后按下
4@a
以对剩余 4 行重复相同的操作。
(此处超过 20 个空间是为了我们的安全,可以根据您的要求进行更改)