大多数情况下,当我插入日期时,我都会尝试在行的中间插入。默认情况下,:r!
插入方式似乎总是将结果放在新行上。这对我来说是有道理的,因为大多数 shell 命令在显示命令结果之前都会输出一个换行符,这在终端中当然是更好的选择。在从 Vim 中执行像 这样的小命令的情况下date +%x
,这不是我喜欢的行为。我该如何解决这个问题?
答案1
在插入模式下,您可以使用Ctrl-R=在当前光标位置插入表达式。
例如,您可以使用system()
函数,但不幸的是,这只能解决一半的问题,因为的输出system()
总是至少会添加最后一个换行符,因此它会在输入后换行。有关如何避免出现这些最后的换行符的解决方案system()
,请查看此我在 vi.stackexchange 上回答。
(因此您可以使用Ctrl-R=systemlist('date')[0] Enter)。
在当前光标位置插入日期的另一种方法是使用Ctrl-R=strftime('%c')Enter
Ctrl-R=正在使用表达式寄存器插入内容。您可以使用命令了解更多信息:help i_ctrl-r
,或者查看 appspot 上的文档。
答案2
我认为问题不在于 shell 命令通常结尾带有换行符,但这read
是一个面向行的命令(即前任ed
命令)。它在20 世纪 70 年代的原始版本中就已经存在,当时还没有出现,常见的用例是将一个文件中的一组行(例如,C 函数或一段文本)读入另一个文件中。大多数用户大多数时候都希望将它们插入为新的单独行。:r!command
您可以通过执行 来检查/演示这一点:r!printf Tuesday
。即使printf Tuesday
命令没有写出换行符(因为您没有指定\n
),您也会Tuesday
自己得到一行。
也许最简单的解决方法是执行
i Enter Esc(中断当前行),
-或者k向上移动一行,然后执行,然后将行重新合并。如果您经常这样做,那么为其映射宏可能会有所帮助。:r!command
JJoin
披露:我vi
相当了解,但还有很多东西vim
我还没学会。也许有更简单的方法可以做到这一点vim
。