Как открыть все файлы в указанном каталоге с помощью vim в обратном алфавитном порядке? Команда -
vim *
откроет все файлы в алфавитном порядке. Как мне перебрать файлы, используя :n
в обратном порядке? Я нашел использованиеtac
здесь, еще одно решение, которое отображает содержимое файлаздесь, и решение для emacsздесь, но они не являются решениями для vim
.
решение1
Общая идея может заключаться в том, чтобы поменять местами то, что *
получается:
printf '%s\n' * | tac
и использовать это с xargs
для создания vim
. Две проблемы с этим:
В общем случае имена файлов могут содержать символы новой строки, поэтому лучше разделять их нулевыми символами и использовать
xargs -0
.vim
порожденныйxargs
в конвейере будет жаловаться на ввод не с терминала. Могут произойти странные вещи. Если вашxargs
поддерживает-o
(переоткрыть stdin как/dev/tty
в дочернем процессе перед выполнением команды), то используйте его.
Тогда полное решение:
printf '%s\0' * | tac -s "" | xargs -0o vim
Примечания:
tac
не требуется POSIX;xargs
может не поддерживать используемые опции. Весь подход непереносим.- Пустая строка в качестве аргумента-опции, по
tac -s
-видимому, устанавливает нулевой символ в качестве разделителя без явной передачи нулевого символа (это может быть проблематично). - Есть
ARG_MAX
предел, вы не можете запустить команду, которая длиннее. Если файлов много, расширение*
может превысить лимит, вы можете получитьArgument list too long
. Еслиprintf
это встроенная команда в вашей оболочке, то лимит может не применяться в этой точке. Тем не менее, он применяется, когдаxargs
пытается породитьvim
.xargs
обнаружит это и запустит два или болееvim
процессов последовательно, если это необходимо. Однако это может быть не то, что вам нужно. Надеюсь, поскольку вы собираетесь вручную выполнять итерацию с:n
, я ожидаю, что количество файлов не так уж и велико, так что этоARG_MAX
не будет проблемой.