有一个相对的路径,我继续输入,比方说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
有几种可能性:
在 Bash 中,输入 + + 后,
$annoying_path
可以Ctrl内Alt联e扩展$annoying_path
,这样Tab就可以自动完成后续组件。但如果$annoying_path
需要双引号(一般来说它确实需要双引号)。如果要使用此方法,请考虑为变量使用更短的名称。注意++Ctrl可以扩展更多(例如别名)。Altebind '"\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)。以下代码片段也适用于 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 Ctrl上a)将 的内容粘贴
$annoying_path
到命令行中。在 Bash 5.0.3 中测试(我不确定该解决方案在命令行中使用多字节字符的 Bash 4 中是否能很好地工作)。与之前的解决方案相比,其优势在于 的值$annoying_path
不是硬编码的,您可以更改它,并且击键将开始使用新值。在 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.conf
tmux source ~/.tmux.conf