vim: приховання перших n літер усіх рядків у файлі


12

Я аналізую файл журналу за допомогою vim, і формат виглядає приблизно так

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

Оскільки більшість випадків я не дбаю про дату та час. Я хочу приховати їх і просто зосередитись на стовпцях Ім'я та LogText (Щоб зберегти деякі властивості екрана). Оскільки перші три стовпці завжди займають перші 35 літер у рядку. Чи є спосіб зробити так, щоб vim не відображав перші 35 літер кожного рядка?


Я не знаю, як це зробити в vim, але якщо ви не проти створити тимчасовий файл, ви можете запустити його cut -c36- logfile > logfile_with_first_35_chars_missing, а потім переглянути його.
— Warwick

Відповіді:


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
Працює чудово, я думаю, що +concealдля того, щоб це працювало, потрібно скомпілювати vim з (мій). Також добре зробити, set concealcursor=ncщоб запобігти розширенню лінії курсору.
— користувач881300

Так, +concealваріант функції є стандартним, як і деякі роки. Сумно, що це поки що не так відомо. Це дійсно чудово і гнучко. Дає безліч нових варіантів ...
— Volker Siegel

8

Використовуйте функціонал фільтра vim . Виконати:

:%!cut -b36-

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

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


А потім використовувати, %!cat %щоб повернути його? Це чудово працює, і я можу використовувати mapперемикач між цими двома
— user881300

Так, це буде працювати, якщо у вас є справжній файл, що резервує ваш буфер.
— Майкл Гомер

3
@Michael Homer: Тепер це буде працювати з символами unicode.
— 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.