vim - 如何插入空格直至 X 列以将列中的内容对齐?

标签 vim

我的复制运算符源代码编写如下。

foo = rhs.foo;
foobar = rhs.foobar;
bar = rhs.bar;
toto = rhs.toto;

我想将内容排列如下(更容易阅读,不是吗?)。

foo    = rhs.foo;
foobar = rhs.foobar;
bar    = rhs.bar;
toto   = rhs.toto;

是否有一个 VIM 魔法插入到第 N 列,或者类似的东西可以让我每行敲击几次按键来排列内容?

最佳答案

这里的其他答案都很棒,尤其是 @nelstrom 对 Tabular.vim 的评论和他出色的截屏视频。

但是如果我懒得安装任何 Vim 插件,但又愿意使用 Vim 宏,我就会使用宏。

算法:

For each line,
    Add tons of spaces before the symbol =
    Go to the column you want to align to
    Delete all text up to =, thereby shifting the = into the spot you want.

对于您的示例,

foo = rhs.foo;
foobar = rhs.foobar;
bar = rhs.bar;
toto = rhs.toto;

将光标定位在第一行的任意位置,并在正常模式下键入以下内容来记录该行的宏:

qa0f=100i <Esc>8|dwjq

这意味着:

  1. qa -- 在热键中录制宏 a
  2. 0 -- 转到行首
  3. f= -- 转到第一个等号
  4. 100i <Esc> -- ( i 后面有一个空格, <Esc> 表示按转义键,不要输入“”。)插入 100 个空格
  5. 8| -- 转到第 8 列(抱歉,您必须手动确定要对齐到哪一列)
  6. dw -- 删除直到下一个非空格字符
  7. j -- 转到下一行
  8. q -- 停止录音。

然后运行存储在热键 a 处的宏, 3 次(对于剩下的 3 行),将光标放在第二行并按:

3@a

关于vim - 如何插入空格直至 X 列以将列中的内容对齐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6154306/

相关文章:

VIM:空格/制表符缩进

unix - 还有其他像 VIM Tutor 这样的教程吗?

vim - VIM 全能补全真的这么有限吗?或者我错过了什么?

perl - VIM 7.2 `:perldo` 和多个表达式的脚本问题

vim - 如何使用vimrc在vim中启用 "Very magic"模式?

vim - 如何映射 Ctrl-B 在插入模式下删除光标下的字符?

css - 像在 Textmate 中一样用 VIM 格式化 CSS

在 vim 中搜索正则表达式

regex - 如何匹配出现 0 次或多于 1 次的空格

vim - 如何在 VIM 中写入一些全局变量到 vim 文件