nnn
nnn(也写作 n³)是一个用 C 语言编写的可移植终端文件管理器。它通过简单的文本插件系统轻松扩展,你可以在现有插件的基础上添加自己的语言无关脚本,其中还包括一个 (neo)vim 插件。
nnn 具有对常用格式(如 xz)的原生归档/解压缩功能、磁盘使用量分析、模糊应用启动器,以及通过插件架构实现的批量文件重命名和文件选择器。nnn 支持使用正则表达式(或简单字符串)过滤器的即时边输入边搜索 (search-as-you-type),以及一种用于在过滤器模式下连续导航且支持目录自动选择的边输入边导航 (navigate-as-you-type) 模式。此外还支持上下文、书签、多种排序选项、SSHFS、对选中项(一组选中的文件)进行批量操作等诸多功能。
尽管功能强大,但 nnn 的设计初衷是易于使用,并通过 环境变量 进行配置,而无需使用配置文件。
安装
用法
nnn 可以使用类 vi 的按键 hjkl 或 方向键 来控制。无需死记硬背按键:方向键、/ 和 q 就足够了。随时按下 ? 可查看快捷键帮助。
配置
nnn 通过 环境变量 进行配置。有关这些设置的详细信息,请参阅 nnn(1) 以及 nnn wiki。
NNN_BMS='d:~/Documents;u:/home/user/Cam Uploads;D:~/Downloads/' NNN_SSHFS="sshfs -o follow_symlinks" # make sshfs follow symlinks on the remote NNN_COLORS="2136" # use a different color for each context NNN_TRASH=1 # trash (needs trash-cli) instead of delete
一个非常有用的设置是 NNN_BMS 变量,它允许你选择快捷键以快速跳转到书签目录。可以通过按下 b 紧接着按下你指定的其中一个字母来跳转。在示例配置中,按下 bD 将导致 nnn 跳转到 ~/Downloads。但所有这些都是可选的,nnn 在你的所有机器上都将保持一致的行为。
在终端中获取选中的文件
为了获取你在 nnn 中选中的文件列表,可以创建以下别名
~/.bashrc
alias ncp="cat ${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection} | tr '\0' '\n'"
之后可以使用该别名将选中的文件通过管道传递给其他工具。
在 nnn shell 中指示深度层级
如果你使用 ! 在当前目录中启动 shell,那么添加以下内容会很方便
~/.bashrc
[ -n "$NNNLVL" ] && PS1="N$NNNLVL $PS1"
这样你的提示符就会指示你正处于一个 shell 中,当你完成工作后它将返回到 nnn。
这与 #退出时跳转目录 (Ctrl-G) 结合在一起将成为一个强大的组合。
退出时跳转目录 (Ctrl-G)
将以下内容添加到你的 .bashrc/.zshrc 中
~/.bashrc or ~/.zshrc
if [ -f /usr/share/nnn/quitcd/quitcd.bash_sh_zsh ]; then
source /usr/share/nnn/quitcd/quitcd.bash_sh_zsh
fi
然后运行 n 命令而不是 nnn(更准确地说,是运行 n bash 函数)。
另请参阅 nnn wiki。
添加自定义插件
你可以通过将自定义插件放入 ${XDG_CONFIG_HOME:-$HOME/.config}/nnn/plugins 来运行它们。例如,你可以创建一个可执行的 shell 脚本
${XDG_CONFIG_HOME:-$HOME/.config}/nnn/plugins/git-changes
#!/usr/bin/env sh git log -p -- "$@"
设置 环境变量 NNN_PLUG='R:git-changes',然后通过按下 ;R 并选择 git-changes 来触发,这将方便地显示特定文件的 git 变更日志及其代码,以便快速轻松地进行审查。