Это не нарушит работу скриптов или команд, зависящих от less
, поскольку псевдонимы оболочки не будут расширены для скриптов или других команд.
Псевдонимы оболочки используются только для удобства в сеансе интерактивной оболочки. Они не переносятся в сценарии и команды оболочки, которые вы запускаете из этого сеанса оболочки, потому что псевдонимы не являются частью среды, наследуемой дочерними процессами.
Единственная проблема может возникнуть, если вы сами забыли, что у вас есть этот псевдоним, а затем продолжили использовать его с дополнительными параметрами в сеансе интерактивной оболочки. Затем эти варианты будут переданы vim
.
Вы также можете использовать view
вместо vim -R
.
Что касается «огромных файлов», то это файлы, размеры которых превышают размер вашей оперативной памяти или, по крайней мере, того же размера, что и значительная часть доступной оперативной памяти. Традиционно редакторы загружали в память весь файл при его открытии, и некоторые до сих пор так делают.Таким образом, открытие больших файлов
Я полагаю, что редактор Vim работает над этим, используя свои «файлы подкачки» (те, которые вы могли видеть с суффиксом имени файла .swp
). См. :help swap-file
в Vim.
Пейджер less
по умолчанию сохраняет все считанные данные в памяти при чтении из канала. Если считывается больше данных, чем доступно ОЗУ, у вас возникнут проблемы. К счастью, есть опция-B
(или --auto-buffers
), которая заставляет less
сохранять в памяти только последнюю часть прочитанных данных. Однако это, очевидно, делает невозможным возврат к ранее просмотренным строкам ввода.
Пейджер more
иногда less
замаскирован (просто жесткой ссылкой на less
двоичный файл ). В системах, где more
является фактическим more
, пейджер не позволяет прокручивать назад при просмотре данных, считанных из каналов.
Ни less
, ни more
не должны полностью читать файл, чтобы иметь возможность просмотреть его содержимое. Оба будут искать файл в соответствующем месте.
Удалите пробел в начале строки, затем замените любой пробел, за которым следует что-то, кроме двоеточия или обратной косой черты, пробелом -обратная косая черта -новая строка -последовательность символов:
Использование GNU sed:
sed -E 's/^ //; s/ ([^:\\])/ \\\n\1/g'
Хотя это кажется нелогичным -интуитивным, на самом деле может быть проще всего сшить зависимость обратно в одну строку (, воссоединив продолжения ), а затем снова разбив их на части, сопоставив последовательности горизонтальных пробелов (с необязательным двоеточием ).
Так дано
$ cat input
ThreadCrash.o : ThreadCrash.cpp ThreadCrash.h hdr1.h \
../inc/hdr2.h../inc/hdr3.h \
../inc/hdr4.h../inc/hdr4.h
затем
$ sed -e :a -e '/\\$/N; s/\\\n//; ta' input
ThreadCrash.o : ThreadCrash.cpp ThreadCrash.h hdr1.h ../inc/hdr2.h../inc/hdr3.h ../inc/hdr4.h../inc/hdr4.h
и, наконец,
$ sed -e :a -e '/\\$/N; s/\\\n//; ta' input | sed -r 's/[[:blank:]]+(: )?/ \1\\\n/g'
ThreadCrash.o : \
ThreadCrash.cpp \
ThreadCrash.h \
hdr1.h \
../inc/hdr2.h \
../inc/hdr3.h \
../inc/hdr4.h \
../inc/hdr4.h
Возможно, вам удастся избежать первого шага, если вы сможете выяснить, как предотвратить разбиение gcc -MM
между строками.
Ссылка:
Использование любого awk в любой оболочке на каждом компьютере UNIX:
$ cat tst.awk
BEGIN { RS="" }
{
gsub(/\\/,"")
printf "%s ", $1
for (i=2; i<NF; i++) {
printf "%s \\\n", $i
}
print $NF
}
$ awk -f tst.awk file
ThreadCrash.o : \
ThreadCrash.cpp \
ThreadCrash.h \
hdr1.h \
../inc/hdr2.h \
../inc/hdr3.h \
../inc/hdr4.h \
../inc/hdr4.h