ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

oh-my-zsh last-working-dir 插件:记住上次工作目录并自动跳回

oh-my-zsh last-working-dir 插件:记住上次工作目录并自动跳回 oh-my-zsh last-working-dir 插件记住上次工作目录并自动跳回【免费下载链接】ohmyzsh A delightful community-driven (with 2,500 contributors) framework for managing your zsh configuration. Includes 300 optional plugins (rails, git, macOS, hub, docker, homebrew, node, php, python, etc), 140 themes to spice up your morning, and an auto-update tool that makes it easy to keep up with the latest updates from the community.项目地址: https://gitcode.com/gh_mirrors/oh/ohmyzsh导读last-working-dir是 Oh My Zsh 内置的一个轻量级目录记忆插件它会在你每次切换目录时把当前路径写入缓存文件并在新开启的 shell 中前提是启动目录为$HOME自动跳回上次离开的目录同时提供一个lwd命令让你随时手动返回。本文以插件官方文档为主体结合 last-working-dir.plugin.zsh 源码讲清它的安装方式、工作原理、lwd用法以及如何借助SSH_USER环境变量为不同 SSH 密钥使用者维护相互隔离的目录记忆文件。插件功能一览根据 README.md该插件提供两项核心能力自动追踪并跳转持续记录最近一次使用的工作目录新建 shell 时若启动目录恰好是$HOME会自动cd回上次记录的位置。lwd手动跳转命令在任何时刻执行lwd即可直接跳回缓存中记录的最后工作目录。这套行为与打开终端就回到上次工作现场的开发习惯高度契合适合作为常用终端的默认插件之一。安装与启用在.zshrc的plugins数组中追加插件名plugins(... last-working-dir)修改完成后重新加载配置source ~/.zshrc或新开终端即可生效。标准插件目录位于仓库 plugins/last-working-dirOh My Zsh 启动时会通过 oh-my-zsh.sh 中的插件加载逻辑自动 source 对应的.plugin.zsh文件如果你在$ZSH_CUSTOM/plugins/下放置同名插件则会优先加载自定义版本。源码级原理缓存文件与 chpwd 钩子插件全部逻辑集中在 last-working-dir.plugin.zsh总共 30 行核心由一个全局标记、一个 chpwd 钩子、一个跳转函数构成。目录变化的记录chpwd 钩子插件利用 zsh 的chpwd钩子机制感知目录切换autoload -U add-zsh-hook add-zsh-hook chpwd chpwd_last_working_dir chpwd_last_working_dir() { # Dont run in subshells [[ $ZSH_SUBSHELL -eq 0 ]] || return 0 # Add .$SSH_USER suffix to cache file if $SSH_USER is set and non-empty local cache_file$ZSH_CACHE_DIR/last-working-dir${SSH_USER:.$SSH_USER} builtin echo -E $PWD | $cache_file }实现要点钩子注册add-zsh-hook chpwd chpwd_last_working_dir把记录函数挂到chpwd事件上此后每次cd成功都会触发写入。子 shell 过滤[[ $ZSH_SUBSHELL -eq 0 ]] || return 0保证在子 shell如命令替换、管道内里切换目录时不会污染记忆文件只有主 shell 的目录变化才会被记录。缓存文件位置默认写入$ZSH_CACHE_DIR/last-working-dir。$ZSH_CACHE_DIR由 oh-my-zsh.sh 初始化默认取$ZSH/cache若该目录不可写则回退到${XDG_CACHE_HOME:-$HOME/.cache}/oh-my-zsh。安全覆写|是 zsh 中绕过noclobber选项的强制覆写语法builtin echo -E用-E避免把路径中的反斜杠序列当转义符解析保证路径原样落盘。手动跳转lwd 函数lwd() { local cache_file$ZSH_CACHE_DIR/last-working-dir${SSH_USER:.$SSH_USER} [[ -r $cache_file ]] cd $($cache_file) }lwd先确认缓存文件可读再用命令替换读取其中保存的路径并执行cd。文件内容即上一次记录的$PWD因此可以放心手动调用。自动跳转仅限新 shell 起始目录为 $HOME插件在加载时并不盲目跳转而是通过一个全局标记加上两个前置条件来控制typeset -g ZSH_LAST_WORKING_DIRECTORY [[ -z $ZSH_LAST_WORKING_DIRECTORY ]] || return 0 [[ $PWD $HOME ]] || return 0 if lwd 2/dev/null; then ZSH_LAST_WORKING_DIRECTORY1 fiZSH_LAST_WORKING_DIRECTORY用typeset -g声明为全局变量记录是否已执行过自动跳转。若该变量已非空说明当前会话已跳转过直接跳过若启动目录不是$HOME例如在文件管理器里指定目录打开终端、或通过zsh -c执行脚本则不打扰用户保留当前目录。只有首次加载且位于$HOME时才尝试lwd成功则置位标记2/dev/null吞掉跳转失败时的报错。进阶特性为不同 SSH 密钥隔离目录记忆官方文档专门介绍了一个多用户场景同一系统账号被多个 SSH 用户通过不同密钥登录时可通过SSH_USER环境变量让插件为每个登录者维护独立的 lwd 缓存文件。其原理对应源码中的这一行local cache_file$ZSH_CACHE_DIR/last-working-dir${SSH_USER:.$SSH_USER}。zsh 的${SSH_USER:.$SSH_USER}语法表示当SSH_USER已设置且非空时在文件名后追加.SSH_USER后缀例如last-working-dir.a.testexample.com未设置时则退化为默认的last-working-dir。这样不同登录者之间互不干扰各自记住各自的最后目录。配置步骤如下来源README.md让 SSH 服务端允许传递环境变量。编辑/etc/sshd/sshd_configPermitUserEnvironment yes在authorized_keys中为不同公钥附加环境变量声明把SSH_USER指向对应的登录者标识environmentSSH_USERa.testexample.com ssh-ed25519 AAAAC3Nz...之后该密钥登录产生的会话会携带SSH_USERa.testexample.comlwd的读写都会落到带该后缀的缓存文件上。需要说明的是PermitUserEnvironment yes同时会允许authorized_keys里的environment指令生效修改 sshd 配置后通常需要重启 sshd 服务且该特性是 SSH 服务端层面的能力受具体发行版与 SSH 版本影响。使用注意事项与排障缓存文件非预期位置若$ZSH_CACHE_DIR不可写Oh My Zsh 会自动回退到$HOME/.cache/oh-my-zsh此时 lwd 缓存文件也会出现在那里属正常行为。lwd无效检查$ZSH_CACHE_DIR/last-working-dir是否存在且可读若文件不存在从未在某个目录停留过lwd会静默不动作。自动跳转未触发确认新终端起始目录确实是$HOME且该会话是首次加载插件ZSH_LAST_WORKING_DIRECTORY未置位。与dirpersist、dirhistory等目录类插件的关系它们关注点不同——dirhistory是方向键浏览历史dirpersist是持久化dirstack而本插件只负责记住并回到最后一个目录可独立使用也可按需组合。相关文件速查插件文档plugins/last-working-dir/README.md插件实现plugins/last-working-dir/last-working-dir.plugin.zsh缓存目录初始化与插件加载入口oh-my-zsh.sh.zshrc参考模板plugins(...)配置处templates/zshrc.zsh-template小结last-working-dir以极简实现完成了记住上次目录 新 shell 自动跳回 手动lwd跳转的完整闭环chpwd钩子负责记录lwd负责回跳ZSH_LAST_WORKING_DIRECTORY与$PWD $HOME两个条件保证只在合适时机自动介入SSH_USER后缀机制则让多密钥共用账号的场景也能各记各的目录。将其加入plugins数组即可在每次打开终端时无缝续接上一次的工作现场。【免费下载链接】ohmyzsh A delightful community-driven (with 2,500 contributors) framework for managing your zsh configuration. Includes 300 optional plugins (rails, git, macOS, hub, docker, homebrew, node, php, python, etc), 140 themes to spice up your morning, and an auto-update tool that makes it easy to keep up with the latest updates from the community.项目地址: https://gitcode.com/gh_mirrors/oh/ohmyzsh创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表