tmux:如何在光标下打开文件

时间:2016-02-15 08:08:00

标签: vim sh zsh tmux tmuxinator

我是vim用户并习惯了gf命令,该命令会在光标下打开文件。

现在我想问一下,如果tmux有这样的东西。

我可以在tmux窗格中导航,并且经常发生光标下有文件路径。现在我想有可能用vim在光标下打开那个文件。

  • 答:在当前窗口中
  • B:在另一个包含并打开vim的窗口中

在调用特殊键组合时,是否有可能在该导航模式下运行sh-script?这样就可以编写我自己的脚本,就像我习惯使用vimscript一样。

我已经在mux .tmux.conf中使用了一些vi-copy模式

# VIM
# ===================================================================

# Vimlike copy mode.
unbind [
bind Escape copy-mode
unbind p
bind p paste-buffer
bind -t vi-copy 'v' begin-selection
bind -t vi-copy 'y' copy-selection

# Enable vi keys.
setw -g mode-keys vi

# https://coderwall.com/p/4b0d0a/how-to-copy-and-paste-with-tmux-on-ubuntu
bind -t vi-copy y copy-pipe "xclip -sel clip -i"

3 个答案:

答案 0 :(得分:1)

要实现您的目标,您需要在命令行中使用stdin(xargs可以这样做),并告诉tmux中的new-window打开数据来自复制缓冲区的参数:

bind -t vi-copy y copy-pipe "xargs -I{} tmux new-window 'vim {}'"

这需要更多调整(获得正确的会话,正确的命令,使用$EDITOR而不是vim等。

非常危险:想想复制/foo/bar/my;rm -rf /

此外,原样,这只适用于相对于tmux'工作目录的路径。

答案 1 :(得分:0)

所以我使用以下绑定运行它:

bind -t vi-copy y copy-pipe "xargs -I{} tmux send-keys -t 1 ';edit {}' Enter && tmux select-pane -t 1"

注释

  • 我改变了vim命令:to;
  • 我在窗格1中打开了一个vim

答案 2 :(得分:0)

有一个tmux模式,允许在'模式中绑定任何复杂的动作':http://ershov.github.io/tmux/

有一个如何使用该补丁在光标下标记单词的示例:

proc is_word_char {c} {
    print [scan $c %c]
    return [expr {$c > " " && $c != "\x7f"}]
}

proc mark-current-word {} {
    clear-selection
    set l [copy-mode-screenline]
    set x [copy-mode-get-cx]
    if {![is_word_char [string range $l $x $x]]} return
    incr x
    while {[is_word_char [string range $l $x $x]]} {
        cursor-right
        incr x
    }
    incr x -2
    begin-selection
    while {[is_word_char [string range $l $x $x]]} {
        cursor-left
        if {$x < 1} return
        incr x -1
    }
}

# Open selection in a vim mini-window (no shell and files)
bind-key -t vi-copy y tcl {
    split-window -c [f #{pane_current_path}] -l 5 "
        echo -n [shell-quote [copy-mode-selection]] | vim -R -"
}

因此,要在vim中打开当前文件:

mark-current-word
split-window -c [f #{pane_current_path}] -l 5 "vim -R [shell-quote [copy-mode-selection]]"