2016-02-15 5 views
2

Я пользователь vim и привык к команде gf, которая открывает файл под курсором.tmux: как открыть файл под курсором

Теперь я хотел спросить, есть ли что-то подобное для tmux.

Я могу перемещаться по tmux-панели, и часто бывает, что есть путь к файлу под курсором. Теперь мне нравится иметь возможность открыть этот файл под курсором с помощью vim.

  • A: в текущем окне
  • B: в другом окне, которое включает в себя и открыл Vim

Может быть, есть возможность запуска Sh-скрипт в этом навигационном режиме при вызове специальная комбинация клавиш? что позволило бы написать мои собственные скрипты, как я привык к vim с vimscript.

Я уже использую некоторые режимы ви-копирования в мультиплексоре .tmux.conf

# 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" 

ответ

1

Чтобы достичь того, чего вы хотите, вы должны использовать стандартный ввод в командной строке (xargs может сделать это), и сказать tmux, в new-window, чтобы открыть данные с аргументами из буфера копирования:

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

Это требует больше настроек (получения правильного сеанса, правильной команда, используйте $EDITOR вместо ВЬЮТ и т.д.

Это довольно опасно: Подумайте, копируя /foo/bar/my;rm -rf /.

Кроме того, as-is, это будет работать только для путей относительно рабочего каталога tmux.

+1

Существует [«открытый» плагин] (https://github.com/chilicuil/tundle-plugins/tree/master/tmux-open), который имеет эту функциональность и многое другое. – kba

+0

милый, вот что я искал – divramod

+0

, так что есть одно новое требование. У меня уже есть одна открытая панель с открытым vim в ней. я понял, чтобы переключиться на это через '' 'bind -t vi-copy y copy-pipe 'xargs -I {} tmux select-pane -t 1" '' '.теперь мой следующий вопрос: как я могу отправить команду «: edit file» на уже открытую сессию vim в панели, на которую я переключился? – divramod

0

Так я получил это работает со следующими обязательными:

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

ноты

  • Я изменил команду Vim: к;
  • у меня есть открытый Vim в панели 1
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]]" 
Смежные вопросы