Chr*_*sen 71
您可以在正常模式或插入模式下使用表达式寄存器, "=
, with p
(或P
)<C-R>
:
在正常模式下:
(<C-M>
在这里意味着Control+ M,或者只是按Enter/ Return)
"=strftime('%c')<C-M>p
Run Code Online (Sandbox Code Playgroud)
在插入模式:
(<C-M>
具有相同的含义如上,<C-R>
装置Control+ R)
<C-R>=strftime('%c')<C-M>
Run Code Online (Sandbox Code Playgroud)
如果你想多次插入同一个表达式的结果,那么你可能需要将它们映射到你的.vimrc
: 中的键上
(这里<C-M>
和<C-R>
应该按字面输入(五个可打印字符的序列——Vim 将在内部翻译它们))
:nmap <F2> "=strftime('%c')<C-M>p
:imap <F2> <C-R>=strftime('%c')<C-M>
Run Code Online (Sandbox Code Playgroud)
gle*_*man 61
:r!date +\%c
看 :help :r!
请注意,这是针对外部命令(它们在您的 shell 中运行),而不是 vim 命令。
int*_*ted 15
如果要插入 vim命令的输出(与函数调用或表达式的返回值相反),则必须捕获它。这是通过:redir
命令完成的,该命令允许您将 vim 的标准输出等价物重定向到变量、文件、寄存器或其他目标。
:redir
使用起来有点不方便;我会编写一个函数来以更方便的方式封装其功能,例如
funct! Exec(command)
redir =>output
silent exec a:command
redir END
return output
endfunct!
Run Code Online (Sandbox Code Playgroud)
一旦声明了这样的函数,就可以使用表达式寄存器(如 Chris Johnsen 所述)在光标位置插入命令的输出。因此,在正常模式下,点击i^R=Exec('ls')
以插入 vim 的当前缓冲区列表。
请注意,该命令将在函数命名空间中执行,因此如果您使用全局变量,则必须通过在它前面加上g:
. 另请注意,Exec()
如上所述,即使是单行输出,也会附加终止换行符。您可能希望substitute()
在函数中添加对 的调用以避免这种情况。
另请参阅/sf/ask/180111501/#2573054了解更多关于 about 的废话redir
和链接一个相关的命令。
Eel*_*vex 11
这些命令将strftime("%c")
在光标所在的位置插入输出:
:exe ":normal i" . strftime("%c")
Run Code Online (Sandbox Code Playgroud)
和
:call feedkeys("i". strftime("%c"))
Run Code Online (Sandbox Code Playgroud)
还有其他方法可以做你想做的事(例如,米克尔的回答中的那些)。
编辑:更好的是,对于就地插入,请使用Chris Johnsen 描述的=
寄存器
:call append(line('.'), strftime("%c"))
Run Code Online (Sandbox Code Playgroud)
将它放在下一行,然后您可以按J
( Shift+ J) 将其连接到当前位置。
或者,如果您需要在一个命令中完成所有操作,您可以这样做
:call setline(line('.'), getline(line('.')) . strftime("%c"))
Run Code Online (Sandbox Code Playgroud)
或者
:call setline(line('.'), getline(line('.')) . " " . strftime("%c"))
Run Code Online (Sandbox Code Playgroud)
取决于您是否希望在日期之前插入一个空格。
:put
您可以与表达式寄存器一起使用=
:
:put =strftime('%c')
Run Code Online (Sandbox Code Playgroud)
此方法允许您创建一个替代命令来:echo
调用:InsertExpr
来插入您的表达式:
command! -nargs=* InsertExpr put =<args>
Run Code Online (Sandbox Code Playgroud)
或者插入如下命令:ls
:
command! -nargs=* InsertCmd put =execute('<args>')
Run Code Online (Sandbox Code Playgroud)
(不知道为什么我无法让 q-args 工作。)
用法:
:InsertExpr strftime('%c')
:InsertCmd ls
Run Code Online (Sandbox Code Playgroud)