将多个vi-copy模式命令组合到一个命令中

时间:2016-02-15 20:37:09

标签: vim vi tmux

我想在tmux vi-copy模式下有一个命令,它将以下三个步骤合二为一:

  1. 选择当前行
  2. 复制在步骤1中进行的选择
  3. 将复制的选择复制管道到xargs
  4. 它看起来像这样吗?

    bind-key -t vi-copy o select-line; copy-selection; copy-pipe "xargs -I{} tmux select-pane -t 1"
    

    我的最后一部分像this link一样运行:

    bind -t vi-copy 'y' copy-selection
    bind -t vi-copy y copy-pipe "xclip -sel clip -i"
    bind -t vi-copy y copy-pipe "xargs -I{} tmux send-keys -t 1 ';call OpenTestFile(\"{}\")' Enter"
    

    如果我在复制模式中选择上述内容,则tmux为:

    1. 复制选择
    2. 将密钥;call OpenTestFile("SELECTION")发送到1号窗格(我在那里打开了vim)
    3. 切换到该窗格
    4. 在vim-function OpenTestFile(input)我意识到,vim从tmux-line-selection中提取文件路径并打开它进行编辑。

      但我不想使用y密钥,而是想使用o密钥来执行此操作,并避免必须先选择该行。

      更新1

      似乎无法在模式中绑定多个命令。 link

2 个答案:

答案 0 :(得分:3)

原始tmux不允许为“模式”击键绑定多个命令。

幸运的是,有一个允许这样做的mod: http://ershov.github.io/tmux/

例如:

bind-key -t vi-copy o tcl { select-line; copy-selection; copy-pipe "xargs -I{} tmux select-pane -t 1" }

答案 1 :(得分:0)

我没有测试过这个特定的配置,但一般来说,你应该能够通过反斜杠转义=INDEX($H$6:$H$26,MATCH(C6,$G$6:$G$26,0))分隔符在一个绑定中执行多个命令。你也可以反斜杠转义换行符,所以这样的东西应该有效(假设你引用的例子正在工作):

;