有没有办法在 vim 中的特定行放置一个字符,即使该行很短?
例如,我正在为一个项目做出贡献,该项目的注释块样式为 79 列宽,两端都有一个注释字符,例如
!--------------!
! Comment !
! More Comment !
!--------------!
但它真的很烦人,即使猜测很大的数字 (35i<SPACE><ESC>)
是否有一个简单的命令可以为我执行此操作,或者一个宏或我可以编写的东西?
set ve=all
然后你可以将 (h,j,k,l) 移动到任何你想要的地方。不管你的线路有多短。
详细信息有 4 个选项block, all, insert, onemore
:
查看 :h virtualedit
这样,你输入短评论后,再输入<ESC>080l
到正确的地方去拖尾!
如果经常使用,您也可以映射它
然后它像这样工作:
把它放在你的.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
在需要时。听起来很复杂,但一旦拥有它就很方便。
这里肯定已经有了很好的答案,尤其是 virtualedit 答案。但是,我没有看到对我来说最直观的方法。我将为评论的最后一行创建一个空行,该行被感叹号包围。然后我会拉出并粘贴空行的新副本,转到旧的空行并转到我要编辑的点并使用重划线模式 ( R
) 添加我的文本而不影响结尾感叹号的位置.
有时,最简单的方法虽然稍显笨拙,但却是最容易使用和记住的。
我通常只是复制并粘贴注释块中的现有行(或从另一个文件复制一个),然后对其进行修改。如果您要替换的文本与您要编写的文本大小大致相同(例如,如果您要更改作者的姓名),您可能只需要添加或删除几个空格即可使所有内容对齐。这比间隔到所需宽度要少得多。
如果你有一个这样的块太长,一个巧妙的技巧是将光标放在第 79 列并按dw。这将清除所有空间,直到!
最后。
我的AlignFromCursor 插件提供了仅将文本对齐到光标右侧的命令和映射,并保持左侧文本不变。因此,将光标放在尾随左侧的空白处!
,您可以将其与<Leader>ri
.