目标是将当前行用作TODO并将其发送到某个外部程序。像这样:
:! /usr/bin/todo "content of current line"
我知道过滤命令,但这意味着我想编辑我不想要的当前缓冲区(:。!充当过滤器)。我知道如何使用'%'获取当前文件但是没有任何方法可以获取其他内容?也许通过使用:execute ...
答案 0 :(得分:33)
:.!
用作过滤器,但:.w !
(请注意空格!)只是传递输出。见:help :w_c
。即。
:.w !/usr/bin/todo -
答案 1 :(得分:3)
您可以将寄存器的内容插入命令行,所以执行以下操作:
"1y$ //yank current row to register 1
: CTRL-R 1 //CTRL-R followed by register id pastes register to command line
应该这样做。
答案 2 :(得分:0)
您可能喜欢这些映射(即保存在.vimrc
或粘贴到:
提示中):
cmap <C-R>' <C-R>=shellescape(getline('.'))<CR>
cmap <C-R><C-R>' <C-R><C-R>=shellescape(getline('.'))<CR>
安装完成后,您可以像这样使用它们:
:!/usr/bin/todo ^R'
(输入一个实际的 Control - R ,上面的例子显示^R
)。
您可以将它们视为基于registere的Control-R和Control-R Control-R(请参阅:help c_CTRL-R
和:help c_CTRL-R_CTRL-R
)的命令行模式版本,其中“虚构”寄存器'
始终包含当前行的shell引用内容。
由于这些映射使用与内置映射相同的前缀(请参阅上面提到的:help
主题),因此必须在timeoutlen
毫秒内输入最终单引号(请参阅:set timeoutlen?
) ,或者它将默认为内置映射(请参阅:help map-typing
)。