Как в VIFM определить движение, которое приведет меня к последнему отредактированному файлу?

Предполагая, что строки продолжаются после «лямбда», как предлагает OP, эта команда должна работать:

gawk 'match($0, /execution\stime:([0-9]+)s/, a) && a[1] > 10 { print $0 }' logfile

с именем файла журнала (/root/.pm2/logs/proxy -out -1.log)

Это решение использует функцию matchдля записи времени выполнения в виде группы в скобках, а затем основывает числовое сравнение на захваченном значении, чтобы решить, следует ли печатать строку.

Более длинная, но более портативная версия:

awk 'match($0, /execution time:([0-9]+)s/) && substr($0, RSTART+15, RLENGTH-16 ) > 10 { print }' testfile
1
10.02.2021, 19:36
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или sed '\:/:d;q'.

0
17.05.2021, 19:22

Теги

Похожие вопросы