【问题标题】:Combine multiple vi-copy mode commands into one command将多个 vi-copy 模式命令合并为一个命令
【发布时间】:2016-04-22 13:17:38
【问题描述】:

我想要一个tmux vi-copy模式的命令,将以下三步合二为一:

  1. 选择当前行
  2. 复制在步骤 1 中所做的选择
  3. 将复制的选择通过管道复制到 xargs

会是这个样子吗?

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. 切换到该窗格

我意识到在 vim 函数 OpenTestFile(input) 中,vim 从 tmux-line-selection 中提取文件路径并将其打开以进行编辑。

但我不想使用y 键,而是想使用o 键来执行此操作并避免必须选择之前的行。

更新 1

看来,在一个模式下绑定多个命令是不可能的。 link

【问题讨论】:

    标签: vim vi tmux


    【解决方案1】:

    原始 tmux 不允许为 'mode' 击键绑定多个命令。

    幸运的是,有一个允许这样做的模式: 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" }
    

    【讨论】:

      【解决方案2】:

      我没有测试过这个特定的配置,但通常你应该能够通过反斜杠转义; 分隔符在一个绑定中执行多个命令。您还可以反斜杠转义换行符,所以这样的事情应该可以工作(假设您引用的示例有效):

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

      【讨论】:

      • 嘿,谢谢你的回复。但我需要这样:bind -t vi-copy o select-line \; copy-selection 如果我这样写,我会收到一条消息:.tmux.conf:132: not enough arguments
      猜你喜欢
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      • 2013-03-10
      • 2023-04-08
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多