VSCode 和 TMUX 兼容

VSCode 和 TMUX 兼容

当我通过单击其图标打开 WSL 时,我需要在某个目录(当然比 更有用的目录System32)中打开它,因此我cd destination在 中添加了一个.bashrc。但是,“在此处打开 Linux Shell”选项(当您按住Shift键盘上的键并右键单击任何文件夹时可用)也被重定向到该目的地,这是不可取的。有没有办法在我的.bashrc脚本中检测到这种情况并让它正常运行?

简而言之,我需要通过Shift+中的选项知道何时打开了 shell右键点击文件夹内,这样我就可以避免将工作目录更改为另一个目录。

我正在使用WSL-Ubuntu 18.04 LTSGNU bash, version 4.4.19(1)-release (x86_64-pc-linux-gnu)

答案1

我会将~/.bashrc增强功能改为如下形式:

CurrDir="$(pwd)"
if [[ "$CurrDir" == "$SystemDir" ]]
then
    cd /path/to/sensible-dir-name
Fi

$SystemDir您的 System32 目录在哪里。\请始终记住/Windows 和 Linux 路径之间的区别:

建议使用:

sed -e 's#^J:##' -e 's#\\#/#g'

也就是说,在您的例子中,您可能可以对路径进行硬编码。

答案2

VSCode 和 TMUX 兼容

您可以将以下代码添加到您的~/.bashrc文件中:

alias current_dir="pwd | sed -e 's/ /\\ /'"
alias save='echo $(current_dir) > ~/.saved_dir && echo "saved current dir, use \"load\" to cd to it"'
alias load='builtin cd $(cat ~/.saved_dir 2>/dev/null)'

if [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] \
  && [[ ! "$TERM_PROGRAM" =~ vscode ]] \
  && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
  # only load while in interactive console but not in vscode or not in tmux itself

  CURRENT_DIR=$(pwd)
  if [[ "${CURRENT_DIR,,}" == "/mnt/c/windows/system32" ]]; then
    # only load path if we start in default WSL system32 folder 
    # so "open in linux shell" still works
    load
  fi

  if command -v tmux &> /dev/null; then 
    # only run tmux if it is installed
    exec tmux
  fi
fi

代码检查终端是否以交互方式运行,而不是在 VSCode 或 TMUX 会话中运行。如果是这种情况:

  • 如果起始路径等于目录,它将加载已保存的目录(参见save/ )或您的主目录(将字符串转换为小写以便更好地匹配)loadwindows/system32${CURRENT_DIR,,}
  • 如果安装了 TMUX,它会自动启动(如果你不喜欢 TMUX,只需将其删除)

如果您想要更改起始目录,只需导航到要用作起始目录的目录并键入save。下次启动终端时,该目录将自动加载。

查看我的 dotfiles 仓库GitHub了解更多信息。

相关内容