Vim 中使用被选择文本以 Shell 命令执行

在 Vi 中如果想选取文本作为 Shell 命令来执行该如何做呢? 想法的背景是想在 Vi 中编辑 Shell 命令,主要是对参数的修改,然后直接选择执行,而不希望复制再贴到 Terminal 下看结果。方法其实很简单,用不着使用 VimShell,关键这个插件的安装还依赖于另两个插件。方法就是:

1. 可视模式选择文本,选择技巧, 按 v 逐字选择,j 从光标位置到行尾,最有用的莫过于大 V,以行为单位选择,所以按一下大 V 直接选中当前行
2. Shift+; 进到 :'<,'> 提示符
3. 输入 w !sh, 回车即可,要用 fish 就用  w !fish

效果

vi-selection-shell

原理(这个表述其实不怎么准确):其实进行的是一个管道操作,把选择的文本内容输送给 sh 执行,相当于

echo "echo 'Hello world'" | sh

如果想把执行结果输出到文件或是剪贴板, 就可借题发挥下了,比如

:'<,'> w !sh > ~/out

:'<,'> w !sh | pbcopy

w 是 write 的简写形式,'<,'> w !sh 的意思是把选择区域内的文本作为 shell 命令 sh 的标准输入,所以就成了把选择文件作为脚本来执行的效果。

分别是执行输出到文件或剪贴板中,也可以在 ~/.vimrc 中自定义函数来简化上两个操作。例如使用自定义快捷键,在 ~/.vimrc 中加入

vmap <leader>e <esc>:'<,'>:w !sh<CR>

这样选择的文本之后,只要按下分号 ; 再按 e 键就执行了选择的文本。

参考:http://stackoverflow.com/questions/1237780/vim-execute-shell-command-without-filtering

类别: Vim. 标签: , . 阅读(79). 订阅评论. TrackBack.

Leave a Reply

Be the First to Comment!

avatar
wpDiscuz