vim – 将视觉选择发送到外部程序而不影响缓冲区
发布时间:2020-12-15 22:10:15 所属栏目:安全 来源:网络整理
导读:我想要实现的是将视觉选择发送到外部程序而不影响缓冲区的内容. 例 让以下代码块表示当前缓冲区.设[]表示视觉选择的开始,[]表示结束. This is not a test 1[]This is not[] a test 2This is not a test 3This is not a test 4 由此我想将此文本发送到外部程
我想要实现的是将视觉选择发送到外部程序而不影响缓冲区的内容.
例 让以下代码块表示当前缓冲区.设[<]表示视觉选择的开始,[>]表示结束. This is not a test 1 [<]This is not[>] a test 2 This is not a test 3 This is not a test 4 由此我想将此文本发送到外部程序.例如: :<some vim command>!<some shell command> 几乎解决方案? 几乎可行的解决方案是: :[range]w ! cat | <some shell command> 这适用于按行发送内容.例如: :%w ! wc -l # produces --> '4' :2,3w ! wc -l # produces --> '2' :2w ! wc -w # produces --> '6' 但是,使用上面的示例缓冲区: :'<,'>w ! wc -w # produces --> '6' 但我想要产生’3’并且不影响缓冲区内容的东西. 想法? 解决方法
范围总是线性的.
无论你做什么,每个接受范围的Ex命令都将始终采用’<作为起始线和'>作为终点线. 将非线性选择传递给外部程序的方法如下: >备份寄存器的内容 这是一个功能: function! VisualCountWords() range let n = @n silent! normal gv"ny echo "Word count:" . system("echo '" . @n . "' | wc -w") let @n = n " bonus: restores the visual selection normal! gv endfunction 你可以在这样的映射中使用: xnoremap <F6> :call VisualCountWords()<CR> 还有你的use of cat is useless: :[range]w ! cat | <some shell command> 应该: :[range]w ! <some shell command> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容