vim: скрыть первые n букв всех строк в файле


12

Я анализирую файл журнала с помощью VIM и формат выглядит следующим образом

YYYY-MM-DD HH:MM:SS.USEC PID Name LogText

Так как в большинстве случаев меня не волнует дата и время. Я хочу скрыть их и просто сосредоточиться на столбцах Name и LogText (чтобы сохранить некоторые свойства экрана). Поскольку первые три столбца всегда занимают первые 35 букв в строке. Есть ли способ заставить vim не отображать первые 35 букв каждой строки?


Я не знаю, как вы делаете это в vim, но если вы не возражаете против создания временного файла, вы можете запустить cut -c36- logfile > logfile_with_first_35_chars_missing, а затем просмотреть это.
— Уорик,

Ответы:


7

Вы спрашивали о том, как скрыть первые буквы, а не убрать их или прокрутить их с глаз долой - вот как на самом деле их скрыть:

Скрыть текст в VIM с помощью маскировки

Вы можете использовать сопоставление в сочетании с подсветкой синтаксиса и функцией скрытия, чтобы фактически не отображать совпадающие символы внутри строк.

Чтобы скрыть первые 25 символов каждой строки:

:syn match Concealed '^.\{25\}' conceal
:set conceallevel=2

Чтобы скрыть только строки с пунктуацией даты:

:syn match Concealed '^....-..-.. ..:..:..\..... ' conceal

Чтобы показать:

:syn clear Concealed
:set conceallevel=0

Как выглядит это нормально:

YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText

будет выглядеть после выполнения первых двух команд:

PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText


Смотрите также - внутри vim:
help :syn-match
help :syn-conceal
help 'conceallevel'
help 'concealcursor'


(Дайте мне знать, если он не будет так себя вести - возможно, есть еще какие-то настройки, о которых я не знаю, или около того - я заставлю это работать.)


1
Работает нормально, я думаю, что vim должен быть скомпилирован с +concealопцией (моя), чтобы это работало. Также хорошо сделать, set concealcursor=ncчтобы предотвратить расширение линии курсора.
— user881300

Да, +concealопция функции стандартна, как некоторые годы. Грустно, что это уже не так хорошо известно. Это действительно здорово и гибко. Дает много новых опций ...
— Volker Siegel

8

Используйте функциональность фильтра vim . Бегать:

:%!cut -b36-

чтобы запустить содержимое вашего буфера через cutкоманду, сохраняя только байты 36 и далее. %означает пропустить весь буфер и заменить его содержимое выводом, затем выполнить команду !фильтра, а остальную часть строки использовать в качестве программы для запуска. Это не изменит базовый файл, пока вы не сохраните буфер поверх.

Чтобы вернуть исходный необрезанный буфер, вы можете использовать его :eпри условии, что он поддерживается настоящим файлом.


А потом использовать, %!cat %чтобы вернуть его? Это прекрасно работает, и я могу использовать mapдля переключения между этими двумя
— user881300

Да, это будет работать, если у вас есть настоящий файл, поддерживающий ваш буфер.
— Майкл Гомер

3
@Michael Homer: теперь будет работать с юникод-символами.
— cuonglm

6

Я думаю, что больше соответствует тому, что вы ищете, это горизонтальная прокрутка .

Z это клавиша горизонтальной прокрутки, за которой следует направление для перемещения с помощью клавиши со стрелкой влево или вправо.

Сначала :set nowrapотключите перенос строк. Затем нажмите z, 35, →чтобы прокрутить 35 мест.


Это очень полезно при чтении логов, спасибо!
— Фабио Ф.

хорошо, отлично подходит для одной страницы, но ... Как сделать страницу вниз или страницу вверх, если курсор не перепрыгнет снова к началу строки?
— Elysch

только что нашел, как это сделать в ответе @ user2987828: использование:set nosol
— elysch

Поместите курсор на последний символ, который вы хотите скрыть. Тогда наберите ...[Esc] z s
— roblogic

2

В командном режиме попробуйте:

:%s/^.\{35}//
  • %s/pat/sub/: Заменить каждое вхождение погладить с суб
  • ^.\{35}: соответствовать первым 35 символам строки

Эта команда удаляет первые 35 символов каждой строки. Вы можете прочитать :h regular-expressionболее подробную информацию о регулярном выражении в vim.


1

Существует легко запоминаемое решение, без изменения буферов или файлов. Поместите курсор на первый символ ( Lв вашем примере) той части файла, которую вы хотите увидеть, затем введите

:set nowrap
zs

Команда zsнастроит vi так, что символ с курсором появится в первом столбце экрана. Убедитесь, что вы не вводили :set nosolсвои файлы конфигурации.

Команда g$переместит ваш курсор в последний видимый столбец.

g0Команда будет двигаться назад курсор к первой видимой колонки, один содержащий L.

Если какая-либо клавиша перемещает курсор влево или вправо из видимых столбцов, тогда видимые окна будут смещены.


И g0команда переместит ваш курсор в первый видимый столбец
— elysch
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.