我是vim用户并习惯了gf
命令,该命令会在光标下打开文件。
现在我想问一下,如果tmux有这样的东西。
我可以在tmux窗格中导航,并且经常发生光标下有文件路径。现在我想有可能用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"
答案 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"
注释
答案 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]]"