如何避免在终端上输入相同的路径?

如何避免在终端上输入相同的路径?

有一个相对的路径,我继续输入,比方说d1/d2/d3。我的会话如下所示:

annoying_path=d1/d2/d3
$ cd /k1
$ vim $annoying_path/subdir1/file.txt
$ vim $annoying_path/subdir2/file.txt
$ cd /k2
$ cat $annoying_path/subdir3/a.tar.gz > /dev/null
$ mv $annoying_path/subdir4/file.txt $annoying_path/subdir4/file2.txt
  • 我实际上没有使用,$annoying_path因为我的系统不会通过这种方式自动完成路径。我必须经常复制/粘贴。
  • 我仍然想拥有我的主目录。

使用组合键来粘贴路径可能会很好用。

我正在使用 mac、iterm2、bash、ssh、tmux。

谢谢!

答案1

有几种可能性:

  1. 在 Bash 中,输入 + + 后,$annoying_path可以CtrlAlte扩展$annoying_path,这样Tab就可以自动完成后续组件。但如果$annoying_path需要双引号(一般来说它确实需要双引号)。如果要使用此方法,请考虑为变量使用更短的名称。注意++Ctrl可以扩展更多(例如别名)。Alte

  2. bind '"\C-x\C-a":"d1/d2/d3"'在 Bash 中,您可以“粘贴”d1/d2/d3到命令行上Ctrl+ x Ctrl+ a。将命令添加到您的命令中,~/.bashrc以使绑定永久存在于交互式 Bash 中。将命令添加"\C-x\C-a":"d1/d2/d3"到您的命令中,~/.inputrc以使绑定永久存在于使用 readline 的任何程序中(包括 Bash)。

  3. 以下代码片段也适用于 Bash:

    annoying_path=d1/d2/d3
    _insert_annoying_path() {
    READLINE_LINE="${READLINE_LINE:0:$READLINE_POINT}$annoying_path${READLINE_LINE:$READLINE_POINT}"
    READLINE_POINT="$(($READLINE_POINT+${#annoying_path}))"
    }
    bind -x '"\C-x\C-a":_insert_annoying_path'
    

    这是一个快速而肮脏的解决方案,(在Ctrl++x Ctrla)将 的内容粘贴$annoying_path到命令行中。在 Bash 5.0.3 中测试(我不确定该解决方案在命令行中使用多字节字符的 Bash 4 中是否能很好地工作)。与之前的解决方案相比,其优势在于 的值$annoying_path不是硬编码的,您可以更改它,并且击键将开始使用新值。

  4. 在 tmux 中的 shell 中运行tmux bind-key -T prefix a send-keys -l 'd1/d2/d3'。这将允许您“粘贴” (默认d1/d2/d3为+ )。此解决方案适用于 tmux 中的任何程序:您按下按键,tmux会为您输入字符串,无论正在运行什么程序。要使绑定永久生效,请添加到您的(请记住,该文件是在 tmux 服务器启动时或按需读取的 ( ))。prefix aprefixCtrlbbind-key -T prefix a send-keys -l 'd1/d2/d3'~/.tmux.conftmux source ~/.tmux.conf

相关内容