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.