文章目录
非正统的文件管理器
nnn(Nnn’s not noice) 是一个性能优化, 功能繁多, 无缝桌面集成, 简化导航, 键入到导航模式具有目录自动输入功能, 磁盘使用情况分析模式, 书签, 上下文, 应用程序启动器, 熟悉的导航快捷方式, 子shell生成等等. 当然它仍然是一个简单有效的文件管理器, 不妨碍使用.
如果PATH环境变量不是指定的, nnn打开当前的工作目录. 如果指定了PATH并且存在, nnn将会打开它. 如果路径不存在并以/结尾, nnn将尝试创建目录树并打开它. 否则, 路径为指向普通文件的路径, nnn尝试创建文件的完整目录树, 打开父目录和提示创建新的文件与基本文件名.
选项
nnn支持下列选项:
-a: 自动设置临时的NNN_INFO变量(该变量在环境变量小节有描述)
-A: 关闭特殊的筛选器匹配时目录自动输入
-b key: 指定要打开的书签密钥
-B: 使用bsdtar存档(默认: atool)
-c: 指定启动器仅是命令行启动器(覆盖 -e)
-C: 8色方案- 按上下文划分的颜色目录, 禁用文件颜色
-d: 详情模式
-D: 以上文颜色显示目录, 并设置NNN_FCOLORS
-e: 在$VISUAL中打开文本文件(否则$EDITOR, 回退vi), [最好是CLI]
-E: 使用$EDITOR进行内部未分离的编辑
-f: 使用检索行历史记录文件
-F val: fifo通知模式 0:作为预览者通知 1:作为资源管理器通知
-g: 使用正则表达式筛选器而不是子字符窜匹配
-H: 展示隐藏文件
-i: 在信息栏中显示当前文件信息
-J: 关闭选择时自动前进(例如, 选择一个条目将不再将光标移动到下一个条目)
-K: 测试键盘绑定冲突和退出
-l val: 鼠标滚轮滚动移动的行数
-n: 以键入到导航模式启动
-o: 仅使用Enter键打开文件
-p file: 复制(或选取)所选内容到文件, 如果file=‘-’, 则为标准输出文件
-P key: 指定要运行的插件密钥
-Q: 禁用具有多个上下文的退出
-r: 显示cp,mv命令进度(仅限linux, 需要advcpmv; 在BSD/macOS '^T’显示进度)
-R: 禁用边缘翻转(例如, 打开时按下最后条目将不再将光标移动到第一个条目, 反之亦然)
-s name: 按名称加载会话
-S: 持久会话
-t secs: 空闲超时(以秒为单位)锁定终端
-T key: 排序顺序, keys: 'a’u / 'd’u / 'e’xtension/ 'r’everse/'s’ize/'t’ime/'v’ersion
-u:不提示在选择和悬停输入之间选择, 如果选择可用
-U: 在状态栏显示用户和组的名字
-V: 展示版本和退出
-x: 显示有关选择cp, mv, rm完成的通知(需要.ntfy插件), 选择后将路径复制到系统剪切板(需要.cbcp插件), 显示xterm标题(如果是非选择模式)
-h: 展示程序帮助和退出
选项使用
快捷键
? : 查看快捷键列表
导航
Up k Up PgUp ^U Page up
Dn j Down PgDn ^D Page down
Lt h Parent ~ ` @ - ~, /, start, prev
Ret Rt l Open ’ First file/match
g ^A 第一个 J Jump to entry/offset
G ^E 最后一个 ^J Toggle auto-advance on open
B (,) Book(mark) b ^/ 选择书签
1-4 Context (Sh)Tab Cycle/new context
2Esc ^Q Quit ^y Next young
^G QuitCD Q Pick/err, quit
q 退出环境
过滤器与提示符
/ 过滤选择 ^N type-to-nav切换
Esc Exit prompt ^L Toggle last filter
. 隐藏文件显示切换 Alt+Esc Unfilter, quit context
文件
o ^O 选择打开方式 n Create new/link
f ^F 文件状态 d 详情模式切换
^R 重命名 r Batch rename
z Archive e 编辑文件
* Toggle exe > 导出列表
空格 文件选中切换 m-m Select range/clear
a 全选 A Invert sel
p ^P 复制 w ^W Cp/mv sel as
v ^V 移动 E Edit sel list
x ^X 删除 S Listed sel size
Esc Send to FIFO
MISC
Alt ; 选择插件 = Launch app
! ^] Shell ] 终端命令输入
c Connect remote u Unmount remote/archive
t ^T Sort toggles s Manage session
T 设置时间类型 0 Lock
^L Redraw ? 配置查看
加图标-nnn显示效果
书签
类似快速访问
两种方式管理书签:
- 书签键: 请参阅NNN_BMS环境部分下如何设置为按键添加书签。选择书签键 b 将在 NN_BMS 中设置的所有书签键显示在书签提示中。
- 符号链接书签: 指向当前目录的符号链接可以使用B键创建(或在 ~/.config/nnn/bookmark 下手动创建). 在书签提示符下按“Enter”进入此目录。如果未设置NNN_BMS,则选择书签键直接将其打开。
输入书签时, 按下选择书签键的目录将设置为上一个目录. 按"-"重新转向它.
单位
最小文件大小单位为字节 (B)。其余的是 K、M、G、T、P、E、Z、Y(1024 的幂),与 ls 中的默认单位相同。
插件
安装插件
- 将插件下载到.config/nnn/plugins目录
- 设置环境变量NNN_PLUG, 指定快捷键对应的插件
;分号 进入插件选择模式
工作区
默认打开4个工作区, 状态显示在左上角.
- 其他活动的工作区有下划线
新上下文复制上一个上下文的状态. 每一个上下文都可以有自己的颜色. 参考环境变量部分进行设置.
会话
会话是保存和恢复工作状态的一种方式. 会话存储设置和上下文, 可以在运行时或设置程序选项加载.
- 在运行时加载会话时, 上次工作状态自动保存到专用的"自动会话"会话文件中. 通过还原的会话选项可以恢复"自动会话"
- 持久会话选项是全局的. 如果使用它, 上一个活动会话将使用程序退出时的最终状态进行更新
- 如果没有会话处于活动状态,则在持久会话模式下使用"自动会话"
- 列出输入流和按键打开书签的优先级高于会话选项(-s/-S)
所有的会话文件都按会话名称位于目录: ${XDG_CONFIG_HOME:-$HOME/.config}/nnn/sessions
"@"是自动会话文件
过滤器
过滤器是使用字符串(或正则表达式模式), 用于立即在当前目录中查找匹配的条目(按类型搜索). 默认是不区分大小写匹配.
每个上下文中的最后一个筛选器在运行时或保存的会话中保留.
当存在唯一匹配项并且它是一个目录时, nnn自动进入该目录. 使用相关程序选项禁用此功能.
特殊按键
过滤器提示
-------- + ---------------------------------------
按键 | 功能
-------- + ---------------------------------------
^char | Usual keybind functionality
Esc | Exit filter prompt but skip dir refresh
Alt+Esc | Unfilter, quit context
-------- + ---------------------------------------
空过滤器提示
------ + ---------------------------------------
按键 | 功能
------ + ---------------------------------------
? | 显示帮助和配置屏幕
/ | 字符串和正则表达式之间切换
: | 切换区分大小写
^L | 清除过滤器(如果提示为非空)
| 或者应用最后一个过滤器
Bksp | 保持过滤器提示并刷新目录
Del | 保持过滤器提示并刷新目录
------ + ---------------------------------------
在type-to-nav模式下的空过滤器提示
------ + ------------------------
按键 | 功能
------ + ------------------------
' | 转到低一个非目录文件
+ | 切换文件选择
, | Mark CWD
- | 转到上次访问的目录
. | 显示隐藏的文件
; | 通过按键运行插件
= | 启动图形用户界面应用程序
> | 启动文件列表
@ | 访问起始目录
] | 显示命令提示符
‘ | 访问根目录
~ | 转到家目录
------ + ------------------------
常见正则表达式用例
- 列出以过滤器表达式开头的所有匹配项, 表达式以’^'(caret)开头
- 键入
'\.mkv'
, 列出所有MKV文件 - 使用
".*"
匹配任何字符(一种模糊搜索) - 排除具有"nnn"的文件名(使用PCRE库编译):‘^(?!nnn)’
在type-to-nav模式下, 目录以筛选模式打开, 允许连续导航.
选择
nnn允许跨目录和上下文选择文件!
有3组键绑定可用于将文件添加到选择:
- 悬停的文件选择切换- 如果"+"在条目前可见, 则取消选择,否则添加到选择
- 将一系列文件添加到所选内容- 在同一条目上重复两次范围键以完全清除选择
- 将当前目录中的所有文件添加到所选内容
可以编辑,复制,移动,删除,存档或链接所选内容.
所选文件的绝对路径将复制到配置目录中的.select文件中. 选择文件在多个程序实例之间共享. 不会合并从多个实例中选择的内容. 写入文件的最后一个实例会覆盖更早的内容. 如果在终端复用器的两个窗格中打开了nnn的两个实例,则可以在一个窗格中选择并在另一个窗格使用选择. 在nnn实例中清除选择, 其中选择是在mv/rm上进行的(但不是cp)
nnn在成功操作所选内容后清除选择. 允许插件单独定义行为.
要编辑所选内容, 使用_edit selection_ 按键. 编辑不会结束选择模式. 您可以在选择中添加更多文件, 然后再次编辑列表. 如果在当前会话中未选择任何文件, 则此选项将尝试列出选择文件.
nnn可以显示目录中列出的未过滤选定文件的总大小. 对于目录, 仅目录的大小默认添加. 要添加目录内容的大小, 请切换到du模式.
查找和显示结果
有两种方式:
- 提供文件路径作为输入
- 使用插件(例如查找器)搜索并列出结果
文件路径必须以NUL分隔('\0'
). 路径,可以是相对于当前目录的,也可以是绝对的. 输入中的无效路径被忽略. 输入处理限制为16384条路径或64MiB(max_paths x max_path_len)的数据.
要列出输入流, 请通过写入其标准输入来启动nnn. 例如, 要列出当前目录中大于1M的文件:
find -maxdepth 1 -size +1M -print0 | nnn
或从文件重定向列表:
nnn < files.txt
方便的bash/zsh函数, 用于在当前目录中按mime类型列出文件:
# to show video files, run: list video
list ()
{
find . -maxdepth 1 | file -if- | grep "$1" | awk -F: '{printf "%s ", $1}' | nnn
}
创建一个临时目录, 其中包括指向给定路径的符号链接. 对于这些符号链接执行的任何操作都将仅在其目标上作用. 之后它们可能会变得无效.
列表目录中符号链接上的向右箭头或"l"指向目标文件. 按"-"返回列表目录. 按"回车"打开符号链接.
可以编写列表输入流的脚本. 可以对其进行扩展, 便于从列表的结果中选择(选项-p)选定的条目.
配置
nnn没有配置文件, 关联文件位于: ${XDG_CONFIG_HOME:-$HOME/.config}/nnn/
配置是使用一些可选的环境变量完成的, 具体的环境变量见下一节.
nnn在不同的操作系统默认使用不同桌面启动器, linux是xdg-open, macos是open, cygwin是cygstart, Haiku是open. 通过设置环境变量也可以自定义
环境变量设置
使用SHELL, VISUAL(或者EDITOR)和PAGER环境变量. SHELL和PAGER支持单个参数组合.
NNN_OPTS
nnn的二进制选项
示例: export NNN_OPTS=“cEnrx”
NNN_OPENER
设置自定义文件启动器
示例: export NNN_OPENER=nuke
注意: “nuke”是插件存储库中可用的文件打开器。
NNN_BMS
值为书签字符串, key_char:location, 由;号隔开
示例: export NNN_BMS="d:$HOME/Docs;u:/home/user/Cam Uploads;D:$HOME/Downloads/"
NNN_PLUG
设置执行插件的按键, key_char:plugin, 由;号隔开
示例: export NNN_PLUG='f:finder;o:fzopen;p:mocplay;d:diffs;t:nmount;v:imgview'
注意:
- 要直接运行插件, 请按;号后跟按键
- 或者, 与Alt键结合使用(即Alt+key)
- 要在运行插件后跳过目录更新, 请在前面加上-
export NNN_PLUG='p:-plugin'
将按键分配给任意非后台cli命令并像插件一样调用, 添加!在命令前.
export NNN_PLUG='x:!chmod +x "$nnn";g:!git log;s:!smplayer "$nnn"'
要选择并运行未分配的插件, 请在插件提示符下按Enter键. 要在启动时运行插件, 请使用选项"-P", 后跟插件按键.
注意:
将$nnn(或导出的变量)放在双引号("$nnn")中
对$NNN_PLUG使用单引号, 这样就不会解释"$nnn"
- (再次)添加!在命令之前
- 要在将命令作为插件运行后禁用目录刷新, 前缀为-!
- 要在命令执行后跳过用户确认, 后缀为*
注意: 不要将*与运行和退出的程序一起使用, 例如cat
export NNN_PLUG='y:-!sync*'
- 运行GUI程序作为插件, 在!后面加上&
export NNN_PLUG='m:-!&mousepad "$nnn"'
- 显示不需要用户输入的运行和退出命令的输出, 添加 | 在!之后
注意: 此选线与&(GUI程序的终端输出屏蔽)不兼容, 忽略*(输入已为用户分页)
export NNN_PLUG='m:-!|mediainfo "$nnn";t:-!|tree -ps;l:-!|ls -lah --group-directories-first'
------------------------------------ + -------------------------------------------------
Key:Command | Description
------------------------------------ + -------------------------------------------------
c:!convert “
n
n
n
"
p
n
g
:
−
∣
x
c
l
i
p
∣
复制图片到剪切板
−
s
e
l
c
l
i
p
b
o
a
r
d
−
t
i
m
a
g
e
/
p
n
g
∗
∣
C
:
!
c
p
−
r
v
"
nnn" png:- | xclip | 复制图片到剪切板 -sel clipboard -t image/png* | C:!cp -rv "
nnn"png:−∣xclip∣复制图片到剪切板−selclipboard−timage/png∗∣C:!cp−rv"nnn” “
n
n
n
"
.
c
p
∗
∣
C
r
e
a
t
e
a
c
o
p
y
o
f
t
h
e
h
o
v
e
r
e
d
f
i
l
e
e
:
−
!
s
u
d
o
−
E
v
i
m
"
nnn".cp* | Create a copy of the hovered file e:-!sudo -E vim "
nnn".cp∗∣Createacopyofthehoveredfilee:−!sudo−Evim"nnn”* | 使用root身份用vim编辑文件
g:-!git diff | 显示git diff
h:-!hx “
n
n
n
"
∗
∣
O
p
e
n
h
o
v
e
r
e
d
f
i
l
e
i
n
h
x
h
e
x
e
d
i
t
o
r
k
:
−
!
f
u
s
e
r
−
k
i
v
"
nnn"* | Open hovered file in hx hex editor k:-!fuser -kiv "
nnn"∗∣Openhoveredfileinhxhexeditork:−!fuser−kiv"nnn”* | Interactively kill process(es) using hovered file
l:-!git log | Show git log
n:-!vi /home/user/Dropbox/dir/note* | Take quick notes in a synced file/dir of notes
p:-!less -iR “KaTeX parse error: Expected 'EOF', got '&' at position 74: … s:-!&̲smplayer -minig…nnn” | Play hovered media file, even unfinished download
x:!chmod +x “$nnn” | Make the hovered file executable
y:-!sync* | Flush cached writes
------------------------------------ + -------------------------------------------------
在线文档: https://github.com/jarun/nnn/tree/master/plugins
NNN_ORDER
特定于目录的排序键
export NNN_ORDER='t:/home/user/Downloads;S:/tmp'
注意: 排序键可以是a/d/e/r/s/t/v(请参阅程序选项 -T)。大写转小写(“r”除外)。路径必须是绝对的。
在5分钟内修改/创建的条目的时间戳反向显示.
NNN_COLOR
每个上下文的颜色数字字符串
# 8 个色号:
# 0-黑色, 1-红, 2-绿, 3-黄, 4-蓝(默认), 5-品红色, 6-青色, 7-白
export NNN_COLORS='1234'
xterm 256 颜色数字 (转换为十六进制, 每个上下文两个符号):
export NNN_COLORS='#0a1b2c3d'
RGB和8个颜色都使用,8个颜色作为回退, 用’;'分隔
export NNN_COLORS='#0a1b2c3d;1234'
注意: 如果仅指定了 256 种颜色,并且终端不支持,则使用默认值
NNN_FCOLOR
指定文件类型特定的颜色
export NNN_FCOLORS='c1e2272e006033f7c6d6abc4'
在 xterm 256 颜色十六进制数字(每种颜色 2 个符号)中指定特定于文件的颜色。
顺序严格,使用 00 省略/使用默认终端颜色。
------------------------- + — + -------------
Order | Hex | Color
------------------------- + — + -------------
Block device | c1 | DarkSeaGreen1
Char device | e2 | Yellow1
Directory | 27 | DeepSkyBlue1
Executable | 2e | Green1
Regular | 00 | Normal
Hard link | 60 | Plum4 梅花
Symbolic link | 33 | Cyan1 青色
Missing OR file details | f7 | Grey62
Orphaned symbolic link | c6 | DeepPink1
FIFO | d6 | Orange1
Socket | ab | MediumOrchid1 中兰花
Unknown OR 0B regular/exe | c4 | Red1
------------------------- + — + -------------
如果终端支持 xterm 256 色或更多,则将呈现特定于文件的颜色。要强制使用 8 色方案,请使用选项 -C。如果不支持 xterm 256 色,则将使用 8 色方案。
NNN_ARCHIVE
要静默处理的存档扩展(默认: bzip2, (g)zip, tar)
export NNN_ARCHIVE="\\.(7z|bz2|gz|tar|tgz|zip)$"
注意: 非默认格式可能需要第三方实用程序。
NNN_ARCHMNT
可选的归档装载器使用程序(默认: 归档装载)
export NNN_ARCHIVE='fuse-archive'
NNN_SSHFS
使用选项指定自定义 sshfs 命令
export NNN_SSHFS='sshfs -o reconnect,idmap=user,cache_timeout=3600'
注意: 选项必须以逗号分隔,它们之间没有任何空格。
NNN_RCLONE
将其他选项传递给 rclone 命令
export NNN_RCLONE='rclone mount --read-only --no-checksum'
注意:选项前面必须带有“rclone”,并且最多支持 5 个标志。
NNN_TRASH
将垃圾箱(而不是 RM -rf)文件放入桌面废纸篓
export NNN_TRASH=n
# n=1: trash-cli, n=2: gio trash
NNN_SEL
自定义选择文件的绝对路径。
NNN_FIFO
用于写入悬停文件路径的命名管道的路径
export NNN_FIFO='/tmp/nnn.fifo'
注意:
- 被带有-a选项的临时路径覆盖
- 如果FIFO文件不存在, 则将创建该文件, 但不会删除(除非它是由-a选项生成的)
NNN_LOCKER
终端锁定程序
export NNN_LOCKER='bmon -p wlp1s0'
export NNN_LOCKER='cmatrix'
NNN_TMPFILE
始终在退出时 CD 并将命令写入指定的文件中。
export NNN_TMPFILE='/tmp/.lastd'
NNN_HELP
运行程序并在程序帮助页面顶部显示输出。
export NNN_HELP='fortune'
NNN_MCLICK
鼠标中建模拟
export NNN_MCLICK='^R'
注意:如果不是 Ctrl+键组合,则仅考虑第一个字符
nnn
在启动命令提示符或生成 shell 之前设置为悬停的文件名。
NO_COLOR
禁用 ANSI 颜色输出(被 NNN_COLORS 覆盖)。