【问题标题】:What can you execute on visually selected text in vim?您可以在 vim 中对视觉选择的文本执行什么操作?
【发布时间】:2011-04-14 17:53:31
【问题描述】:

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

   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 的数字在选择中)

谢谢。

【问题讨论】:

    标签: python vim vi


    【解决方案1】:

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

    过滤器是可以从标准输入读取的任何标准 UNIX 程序(sortawkgrepcutpastesed ...)并写入标准输出。

    Vim 的执行模式 让您可以读入或用程序的输出替换文本。如果您进行视觉选择(例如,使用VC-V)并点击:,您的命令提示符将立即变为:'<,'>,这意味着“将任何命令应用于包含在视觉选择中的行。”此时,您可以写!foo 将文本替换为程序foo 的输出。

    例如,要按 python 列对文本进行排序,选择它,点击:,然后输入!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 }' 这样的命令将翻转第二列和第三列(但请注意,列间距是折叠的)。要增加列,请尝试:'<,'>!awk '{ sub($4, $4+1); print }'

    【讨论】:

      【解决方案2】:

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

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

      pwd
      echo $SHELL
      

      选择第一行并输入<Leader>esp。分解:

      <Leader>e 是调用 EvalSelection.vim 的默认键盘命令。 s 指定你想使用你的 shell 来评估它。 p 指定要将结果打印到 Vim 的命令行。

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

      【讨论】:

      • 我添加了 3 个具体问题。感谢您的链接。我正在寻找微妙的操作。
      • 你能发布一个 EvalSelection 插件的简单用法示例吗?
      • 当我选择第一行时添加 do: :'esp ###only the esp part type I get: E488: Trailing characters
      • 这其实和我的初衷有点不同。我希望能够对选择进行操作(将它们视为对语言的无效语句的数据。)换句话说,我选择了 1..6,我想通过类似的命令对这个范围求和蟒蛇总和()。但我似乎做不到。不确定是否有任何本地 vim-python 替代 :perldo
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-21
      • 2012-07-13
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多