你可以在vim中对视觉选择的文本执行什么?

时间:2010-09-20 15:12:52

标签: python vim vi

您可以在视觉选择的文本上执行哪些可能的操作(使用键盘快捷键)?为简单起见,请考虑这个简单的部分:

   a  b  cd  1  p
   a  b  cd  2  y
   a  b  cd  3  t
   a  b  cd  4  h
   a  b  cd  5  o
   a  b  cd  6  n

一个具体问题:是否可以在选择中执行Python / shell命令/脚本?

一些更具体的问题:

1 - )如何对python列进行就地排序?

2 - )如何切换列的位置?

3 - )如何增加值? (比如说。选择中只有大于3的数字)

感谢。

2 个答案:

答案 0 :(得分:5)

这个问题非常广泛,但首先要看:help visual-operators

关于具体问题,请查看插件EvalSelection.vim,该插件评估在shell,Python和其他几个解释器中的可视区域中选择的源代码。举个简单的例子,如果你的Vim缓冲区中有以下内容:

pwd
echo $SHELL

选择第一行并输入<Leader>esp。打破它:

<Leader>e是调用EvalSelection.vim的默认键命令。 s指定您要使用shell对其进行评估。 p指定您要将结果打印到Vim的命令行。

运行上面的命令时,我得到以下输出:~/Desktop并选择了第一行。我在第二行使用相同的命令获得/bin/zsh/

答案 1 :(得分:4)

要正确执行此操作,您需要使用过滤器和vim的执行模式

过滤器是任何标准UNIX程序(sortawkgrepcutpaste,{{ 1}} ...)可以从stdin读取并写入stdout。

Vim的执行模式允许您使用程序输出读入或替换文本。如果您进行了视觉选择(例如,使用sedV),然后点击C-V,您的命令提示符将立即为:,这意味着“应用以下任何命令”视觉选择中包含的线条。“此时,您可以编写:'<,'>以使用程序 foo 的输出替换文本。

例如,要按python列对文本进行排序,请选择它,点击!foo,然后输入:。整个命令看起来像!sort -k5运行它会产生:

:'<,'>!sort -k5

对于其他两项任务, a b cd 4 h a b cd 6 n a b cd 5 o a b cd 1 p a b cd 3 t a b cd 2 y 是你的朋友。像awk这样的命令会翻转第二列和第三列(但请注意列间间距是折叠的)。要增加列,请尝试:'<,'>!awk '{ print $1, $3, $2, $4, $5 }'

之类的内容