5

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

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

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

但它真的很烦人,即使猜测很大的数字 (35i<SPACE><ESC>)

是否有一个简单的命令可以为我执行此操作,或者一个宏或我可以编写的东西?

4

5 回答 5

9
set ve=all

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

详细信息有 4 个选项block, all, insert, onemore

查看 :h virtualedit

这样,你输入短评论后,再输入<ESC>080l到正确的地方去拖尾!

如果经常使用,您也可以映射它

然后它像这样工作:

在此处输入图像描述

于 2013-01-18T14:53:12.373 回答
2

把它放在你的.vimrc文件中并重新启动 vim:

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

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

另一种简单的方法是在某处保留一个正确大小的空评论框,在需要的地方拉/粘贴它,每次只需R用您的评论替换其中的空格。

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

如果您已经输入了注释文本,您可以使用宏在正确的位置添加右侧!标记。例如,记录一个宏 ( qa),该宏 ( ) 添加的字符多于任何行所需的字符 (例如80ASpaceEsc),然后使用 goto 列 ( |) 转到正确的位置 ( 79|) 并从那里替换多余的字符 ( C!Esc),然后向下移动一行 ( j),然后停止录制 ( q)。重复此宏 ( @a) 然后依次“修复”每一行并移至下一行。总而言之:qa80A<space><esc>79|C!<esc>jq然后@a在需要时。听起来很复杂,但一旦拥有它就很方便。

于 2013-01-18T14:36:52.017 回答
1

这里肯定已经有了很好的答案,尤其是 virtualedit 答案。但是,我没有看到对我来说最直观的方法。我将为评论的最后一行创建一个空行,该行被感叹号包围。然后我会拉出并粘贴空行的新副本,转到旧的空行并转到我要编辑的点并使用重划线模式 ( R) 添加我的文本而不影响结尾感叹号的位置.

有时,最简单的方法虽然稍显笨拙,但却是最容易使用和记住的。

于 2013-01-18T16:30:59.307 回答
0

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

如果你有一个这样的块太长,一个巧妙的技巧是将光标放在第 79 列并按dw。这将清除所有空间,直到!最后。

于 2013-01-18T15:06:53.997 回答
0

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

于 2013-01-18T15:17:21.127 回答