当我位于目录中的其他位置时,我无法找到直接移动到最近编辑的文件的 VIFM 动作。有这样的动议吗?如果没有,是否可以定义一个?
我尝试使用时间修改的窗口排序,然后用 gg 跳到顶部。然而,这种排序将目录放在窗口顶部,因此 gg 将我带到那里。它很接近,但因为这是我经常想做的事情,所以我希望尽量减少实现它的努力。谢谢!
答案1
这的文档fnameescape
包含一个示例命令,该命令将光标移动到最近修改的文件,但该文件也可以是目录。
因此,为了准确满足您的请求,请将下面的片段放入
~/.config/vifm/vifmrc
,重新启动 Vifm,现在您可以使用
,f
跳转到最新的非目录文件*。
"Cursor to most recently modified file
noremap ,r :exe 'goto' fnameescape(system('ls -At | head -n 1'))<CR>
"Cursor to least recently modified file
noremap ,o :exe 'goto' fnameescape(system('ls -Art | head -n 1'))<CR>
"Cursor to most recently modified non-directory file
noremap ,f :exe 'goto' fnameescape(system('ls -Atp | grep -vm1 /'))<CR>
"Cursor to least recently modified non-directory file
noremap ,l :exe 'goto' fnameescape(system('ls -Atrp | grep -vm1 /'))<CR>
如您所见,为了您的方便,我还提供了其他相关映射。
*假设文件名不包含换行符。
它是如何工作的?
goto
是将光标移动到给定文件的 Vifm 函数。
所需的文件是 列出的第一个非目录文件ls -Atp
,即不包含斜杠的第一行。grep -v /
过滤掉包含斜杠的行,并且该-m1
选项告诉它只返回第一个匹配项。
虽然-m
在 BSD 和 GNU/Linux 系统中可用,但 POSIX 并不需要它,因此如果您的 Grep 缺少它,只需使用
grep -v / | head -n 1
orsed '\:/:d;q'
代替。