您可以在视觉选择的文本上执行哪些可能的操作(使用键盘快捷键)?为简单起见,请考虑这个简单的部分:
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的数字)
感谢。
答案 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程序(sort
,awk
,grep
,cut
,paste
,{{ 1}} ...)可以从stdin读取并写入stdout。
Vim的执行模式允许您使用程序输出读入或替换文本。如果您进行了视觉选择(例如,使用sed
或V
),然后点击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 }'
。