vim 在vi中的特定列放置字符

vfh0ocws  于 12个月前  发布在  其他
关注(0)|答案(6)|浏览(195)

有没有一种方法可以在Vim中的特定行中放置一个字符,即使该行很短?
例如,我正在为一个项目做贡献,该项目的注解块样式为79列宽,两端都有一个注解字符,例如。

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

字符串
但它真的很烦人的空间超过它,即使猜测大数字(35i< SPACE>< ESC>)
有没有一个简单的命令,可以为我做这件事,或者一个宏或什么,我可以写?

bq9c1y66

bq9c1y661#

set ve=all

字符串
那么你就可以把(h,j,k,l)移到你想要的任何地方。不管你的线有多短。
有4个选项block, all, insert, onemore可供详细了解:
检查:h virtualedit
这样,在您键入简短注解后,然后键入<ESC>080l以转到尾部!的正确位置
如果经常使用,您也可以Map它
那么它是这样工作的:


的数据

ehxuflar

ehxuflar2#

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

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

字符串
在插入模式下,输入注解文本后,只需按F1(或您Map的任何键)即可自动填充空格并在第79列中插入!
另一个简单的方法是在某个地方保留一个正确大小的空评论框,在需要的地方拉/粘贴它,每次用你的评论替换其中的空格。
如果你想重新格式化一个太短的框,一种方法是从示例中的注解开始,制作一个视觉块(Ctrl+v),选择右侧边缘左侧的单个列,拖动它(y),然后重复粘贴它(p)。这将连续地将注解的整个右侧移动一步,将框扩展10倍。重复直到它具有所需的长度。
如果已经输入了注解文本,则可以使用宏在正确的位置添加右侧的!标记。例如,记录一个宏(qa),它追加的字符数超过了任何一行所需的字符数(例如80 ASpaceEsc),然后使用后藤列(|)去正确的地方(79|)并从那里替换多余的字符(C!ESC),然后向下移动一行(j),并停止记录(q)。重复此宏(@a),然后依次“修复”每行并移动到下一行。总共:qa80A<space><esc>79|C!<esc>jq,然后在需要时@a。听起来很复杂,但一旦你有了它就很方便。

huwehgph

huwehgph3#

当然,这里已经有很好的答案了,特别是virtualedit答案。然而,我没有看到对我来说最直观的方法。我会为评论的最后一行创建一个空行,它只是被感叹号包围。然后我会拉并粘贴一个新的空行副本,转到旧的空行,转到我想编辑的地方,并使用overstrike模式(R)添加我的文本,而不影响结尾感叹号的位置。
有时候,最简单的方法,虽然有点笨拙,但却是最容易使用和记住的。

oewdyzsn

oewdyzsn4#

我通常只是在注解块中复制并粘贴一个现有的行(或者从另一个文件中复制一个),然后修改它。如果你要替换的文本与你想写的内容大小差不多(例如,如果你要更改作者的名字),你可能只需要添加或删除一些空格就可以让所有内容对齐。这比按所需的宽度间隔开要少得多。
如果你有一个块太长了,一个巧妙的技巧是把光标放在第79列,然后按dw,这将清除所有空格,直到最后的!

ddrv8njm

ddrv8njm5#

我的AlignFromCursor plugin提供的命令和Map只对齐光标右侧的文本,并保持左侧的文本不变。因此,当光标位于尾部!左侧的空白处时,您可以将其与<Leader>ri对齐。

yhxst69z

yhxst69z6#

您可以在每行的末尾添加一些空格:

:%g//normal 20A

字符串
然后在所需的列号处按!字符对其进行排序(例如\%>25c):

:%s/^\|\%>25c.*/!/g

相关问题