我的.vimrc中有以下说明:
map t :!../tt <C-R><C-W> <CR><CR>
它工作得很好:vim从文件中获取单词并运行../t word
。但令人讨厌的是,当命令运行时,vim返回shell一段时间然后返回文件。我不需要看到命令输出,所以有可能绕过这个恼人的闪光灯吗?
答案 0 :(得分:2)
您可以尝试
nnoremap <silent> t :<C-u>silent !../tt <C-r>=shellescape(expand('<cword>'), 1)<CR><CR><C-l>
或
nnoremap <silent> t :<C-u>call system('../tt '.shellescape(expand('<cword>')))<CR>
甚至
nnoremap <expr> <silent> t system('../tt '.shellescape(expand('<cword>')))[-1]
。注意一些事情:
map
(不含n
和nore
)。我相信您不需要这种映射用于可视和操作员挂起模式(前导n
仅限制映射到正常模式),您也不应该希望此映射可重映射。<C-u>
来丢弃您偶尔可以输入的计数,除非您确实知道需要它(第三个版本使用两个黑客,将映射转换为带有副作用的无操作且不需要<C-u>
)。silent !
的版本(不要忘记silent
之后的空格,这就是为什么@David Pope的答案不起作用)最后有<C-l>
。这是因为使用!
将总是提供对终端的访问权限,因此在命令运行后需要重绘。system()
的版本将无效,这是一个记录错误。如果您不想这样做(expand('<cword>')
将不会添加换行符),那绝对是安全的。t
是一个非常有用的动议。最好学会使用它然后重新映射到某些东西。我建议,t
作为lhs。答案 1 :(得分:0)
我相信这应该有用。
map <silent> t :silent!../tt <C-R><C-W> <CR><CR>
但我没有你的应用程序,所以我无法测试stderr vs. stdout vs. etc。我不知道vim中是否有问题。