在 vim 中,如何将文本移动到某些列?

在 vim 中,如何将文本移动到某些列?

我有诗歌的文本文件,其右侧有行号,如下所示:

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^[

  1. 转到行末 ( $)
  2. 向后查找第一个“:”(?:<ctrl+Enter>
  3. 删除从此处到行尾的所有内容 ( D)
  4. 插入 30 个空格 - 这样我就能知道有足够的空白可以让我跳转到第 30 列 ( i <ctrl+Esc>)
  5. 跳至第 30 列 - 不确定为什么我需要在这里使用“29”,肯定是一个“功能” ( 029l)
  6. 粘贴步骤 3 中删除的文本(P
  7. 通过删除步骤 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 列。请按照以下步骤操作:

  1. 转到第一行(我们需要开始更改的地方,这里是“refclkp:在 std_logic 中;“)

  2. 然后按下<Esc>键进入正常模式

  3. 按下这些键

    qa0f:i (Press the space bar more than 20 times)<Esc>15|dw<DownArrow>q

  4. 然后按下4@a以对剩余 4 行重复相同的操作。

(此处超过 20 个空间是为了我们的安全,可以根据您的要求进行更改)

相关内容