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.