将字符放在vi中的特定列

时间:2013-01-18 14:16:16

标签: vim vi

有没有办法在vim的特定行放置一个字符,即使该行很短?

例如,我正在为一个具有79列宽的注释块样式的项目做贡献,在任一端都有注释字符,例如。

!--------------!
! Comment      !
! More Comment !
!--------------!

但即使猜测大数字(35i< SPACE>< ESC>)

,它仍然很烦人。

是否有一个简单的命令可以为我,或宏或我能写的东西?

5 个答案:

答案 0 :(得分:8)

set ve=all

然后你可以将(h,j,k,l)移动到你想要的任何地方。无论你的线路有多短。

有4个选项block, all, insert, onemore了解详情:

检查:h virtualedit

以这种方式,在您输入简短评论后,请键入<ESC>080l以转到正确的位置!

如果经常使用

,你也可以映射它

然后就像这样:

enter image description here

答案 1 :(得分:2)

将其放入.vimrc文件并重新启动vim:

inoremap <F1> <C-r>=repeat(' ', 79-virtcol('.'))<CR>!<CR>

在输入注释文本后,只需按插入模式中的 F1 (或任何键映射的键)以自动填充空格并在第79列中插入!

另一个简单的方法是在某个地方保留一个正确大小的空注释框,在需要的地方将其粘贴/粘贴,然后只需 R ,每次用你的注释替换它中的空格。

如果要重新格式化一个太短的框,一种方法是从示例中的注释开始,创建一个Visual Block( Ctrl + v )选择右侧边缘左侧的单个列,将其拉出( y ),然后重复粘贴它( p )。这将连续将评论的整个右侧移动一步,向右扩展框。重复,直到它具有所需的长度。

如果您已输入评论文字,则可以使用宏在正确的位置添加右侧!标记。例如,记录一个宏( q a ),其附加的字符数多于任何行所需的字符数(例如 8 0 A 空间 Esc ),然后使用goto列( | )转到正确的位置( 7 9 | )并从那里替换多余的字符( C < kbd> Esc ),然后向下移动一行( j ),并停止录制( q )。重复这个宏( @ a )然后依次“修复”每一行并移动到下一行。总计:qa80A<space><esc>79|C!<esc>jq然后根据需要@a。听起来很复杂但是一旦你拥有它就很方便。

答案 2 :(得分:1)

这里肯定有很好的答案,特别是virtualedit答案。但是,我没有看到对我来说最直观的方法。我会为注释的最后一行创建一个空行,它只是被感叹号包围。然后我会猛拉并粘贴空行的新副本,转到旧空行并转到我要编辑的点并使用重击模式( R )来添加我的文本而不影响结束感叹号的位置。

有时最简单的方法,虽然稍微笨重,但最容易使用和记忆。

答案 3 :(得分:0)

我通常只是复制并粘贴注释块中的现有行(或从另一个文件中复制一行),然后进行修改。如果您要替换的文本大小与您要编写的文本大小相同(例如,如果您要更改作者的名称),则可能只需添加或删除一些空格即可使所有内容对齐。与间距达到所需宽度相比,它的痛苦要小得多。

如果你有一个这么长的块,一个巧妙的技巧是将光标放在第79列并按 d w 。这将清除最后!之前的所有空格。

答案 4 :(得分:0)

我的AlignFromCursor plugin提供命令和映射,只对齐光标右侧的文本,并保持文本左侧不变。因此,将光标放在尾随!左侧的空白处,您可以将其与<Leader>ri对齐。