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

hec6srdp  于 2022-11-11  发布在  其他
关注(0)|答案(4)|浏览(145)

我是一个VIM用户,习惯了gf命令,它打开光标下的文件。
现在我想问一下,tmux是否有类似的东西。
我可以通过一个tmux窗格导航,它经常发生,有一个文件路径下的光标。现在我喜欢有可能打开该文件下的光标与vim。

  • 当前窗口中的A:
  • B:在另一个窗口中,该窗口包含并打开了vim。

当调用一个特殊的组合键时,也许有可能在导航模式下运行一个sh脚本?这将使我有可能编写自己的脚本,就像我习惯于在vim中使用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"
unguejic

unguejic1#

我一直在寻找一个答案多年,并最终使一个tmux插件:https://github.com/artemave/tmux_super_fingers .它仍然让我困惑,这样的基于终端的工作流的组成部分是如何不是一个解决的问题(好吧,现在是)。

rdlzhqv9

rdlzhqv92#

要实现所需的功能,需要在命令行中使用stdin(xargs可以做到这一点),并在new-window中告诉tmux使用复制缓冲区中的参数打开数据:

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

这需要更多的调整(获得正确的会话,正确的命令,使用$EDITOR而不是vim等)。
这是**相当危险的:**想想复制/foo/bar/my;rm -rf /
而且,照原样,这将只对相对于tmux的工作目录的路径起作用。

kxkpmulp

kxkpmulp3#

有一个用于tmux的mod,允许在'mode'中绑定任何复杂度的操作: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]]"
t1rydlwq

t1rydlwq4#

所以我用下面的绑定来运行它:

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

注解

  • 我更改了vim命令:到;
  • 我在窗格1中有一个打开的VIM

相关问题