有没有一种方法可以在Vim中的特定行中放置一个字符,即使该行很短?例如,我正在为一个项目做贡献,该项目的注解块样式为79列宽,两端都有一个注解字符,例如。
!--------------! ! Comment ! ! More Comment ! !--------------!
字符串但它真的很烦人的空间超过它,即使猜测大数字(35i< SPACE>< ESC>)有没有一个简单的命令,可以为我做这件事,或者一个宏或什么,我可以写?
bq9c1y661#
set ve=all
字符串那么你就可以把(h,j,k,l)移到你想要的任何地方。不管你的线有多短。有4个选项block, all, insert, onemore可供详细了解:检查:h virtualedit这样,在您键入简短注解后,然后键入<ESC>080l以转到尾部!的正确位置如果经常使用,您也可以Map它那么它是这样工作的:
block, all, insert, onemore
:h virtualedit
<ESC>080l
!
的数据
ehxuflar2#
将其放入.vimrc文件并重新启动Vim:
.vimrc
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。听起来很复杂,但一旦你有了它就很方便。
qa80A<space><esc>79|C!<esc>jq
@a
huwehgph3#
当然,这里已经有很好的答案了,特别是virtualedit答案。然而,我没有看到对我来说最直观的方法。我会为评论的最后一行创建一个空行,它只是被感叹号包围。然后我会拉并粘贴一个新的空行副本,转到旧的空行,转到我想编辑的地方,并使用overstrike模式(R)添加我的文本,而不影响结尾感叹号的位置。有时候,最简单的方法,虽然有点笨拙,但却是最容易使用和记住的。
R
oewdyzsn4#
我通常只是在注解块中复制并粘贴一个现有的行(或者从另一个文件中复制一个),然后修改它。如果你要替换的文本与你想写的内容大小差不多(例如,如果你要更改作者的名字),你可能只需要添加或删除一些空格就可以让所有内容对齐。这比按所需的宽度间隔开要少得多。如果你有一个块太长了,一个巧妙的技巧是把光标放在第79列,然后按dw,这将清除所有空格,直到最后的!。
ddrv8njm5#
我的AlignFromCursor plugin提供的命令和Map只对齐光标右侧的文本,并保持左侧的文本不变。因此,当光标位于尾部!左侧的空白处时,您可以将其与<Leader>ri对齐。
<Leader>ri
yhxst69z6#
您可以在每行的末尾添加一些空格:
:%g//normal 20A
字符串然后在所需的列号处按!字符对其进行排序(例如\%>25c):
\%>25c
:%s/^\|\%>25c.*/!/g
型
6条答案
按热度按时间bq9c1y661#
字符串
那么你就可以把(h,j,k,l)移到你想要的任何地方。不管你的线有多短。
有4个选项
block, all, insert, onemore
可供详细了解:检查
:h virtualedit
这样,在您键入简短注解后,然后键入
<ESC>080l
以转到尾部!
的正确位置如果经常使用,您也可以Map它
那么它是这样工作的:
的数据
ehxuflar2#
将其放入
.vimrc
文件并重新启动Vim:字符串
在插入模式下,输入注解文本后,只需按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
。听起来很复杂,但一旦你有了它就很方便。huwehgph3#
当然,这里已经有很好的答案了,特别是virtualedit答案。然而,我没有看到对我来说最直观的方法。我会为评论的最后一行创建一个空行,它只是被感叹号包围。然后我会拉并粘贴一个新的空行副本,转到旧的空行,转到我想编辑的地方,并使用overstrike模式(
R
)添加我的文本,而不影响结尾感叹号的位置。有时候,最简单的方法,虽然有点笨拙,但却是最容易使用和记住的。
oewdyzsn4#
我通常只是在注解块中复制并粘贴一个现有的行(或者从另一个文件中复制一个),然后修改它。如果你要替换的文本与你想写的内容大小差不多(例如,如果你要更改作者的名字),你可能只需要添加或删除一些空格就可以让所有内容对齐。这比按所需的宽度间隔开要少得多。
如果你有一个块太长了,一个巧妙的技巧是把光标放在第79列,然后按dw,这将清除所有空格,直到最后的
!
。ddrv8njm5#
我的AlignFromCursor plugin提供的命令和Map只对齐光标右侧的文本,并保持左侧的文本不变。因此,当光标位于尾部
!
左侧的空白处时,您可以将其与<Leader>ri
对齐。yhxst69z6#
您可以在每行的末尾添加一些空格:
字符串
然后在所需的列号处按
!
字符对其进行排序(例如\%>25c
):型