在 Vi 中如果想选取文本作为 Shell 命令来执行该如何做呢? 想法的背景是想在 Vi 中编辑 Shell 命令,主要是对参数的修改,然后直接选择执行,而不希望复制再贴到 Terminal 下看结果。方法其实很简单,用不着使用 VimShell,关键这个插件的安装还依赖于另两个插件。方法就是:
1. 可视模式选择文本,选择技巧, 按 v 逐字选择,j 从光标位置到行尾,最有用的莫过于大 V,以行为单位选择,所以按一下大 V 直接选中当前行
2. Shift+; 进到 :'<,'> 提示符
3. 输入 w !sh, 回车即可,要用 fish 就用 w !fish
效果
原理(这个表述其实不怎么准确):其实进行的是一个管道操作,把选择的文本内容输送给 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
本文链接 https://yanbin.blog/vim-execute-selection-as-shell/, 来自 隔叶黄莺 Yanbin Blog
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。