vim:ファイル内のすべての行の最初のn文字を非表示にします


12

私はvimを使用してログファイルを分析していますが、形式は次のようになります

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

ほとんどの場合、日付と時刻は気にしません。それらを非表示にして、Name列とLogText列に焦点を合わせたい(画面領域を節約するため)。最初の3列は常に行の最初の35文字を占めるためです。vimが各行の最初の35文字を表示しないようにする方法はありますか?


vimでどのように実行するかわかりませんが、一時ファイルの作成を気にしない場合は、を実行cut -c36- logfile > logfile_with_first_35_chars_missingしてから確認できます。
ワーウィック14

回答:


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

最初の2つのコマンドを実行すると、次のようになります。

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、カーソル行が拡大するのを防ぐために行うことをお勧めします。
user881300 14

はい、+conceal機能オプションは数年のように標準です。悲しいことに、今ではあまり知られていない。それは本当に素晴らしく、柔軟です。与えるたくさんの新しいオプションのを...
フォルカー・シーゲル

8

vimのフィルター機能を使用します。実行:

:%!cut -b36-

cutコマンドでバッファの内容を実行し、36バイト目以降のみを保持します。%バッファ全体を実行し、その内容を出力で置き換えることを意味します。その後!、実行するプログラムとして行の残りを含むfilterコマンドです。この場合、バッファを上から保存しない限り、基礎となるファイルは変更されません。

トリミングされていない元のバッファを元に戻すには:e、実際のファイルでバックアップされている場合、を使用できます。


それからそれ%!cat %を取り戻すために使用しますか?これは素晴らしい作品と私は使用することができmap、これらの2を切り替えるには
user881300

はい、バッファをバッキングする実際のファイルがある限り、それは機能します。
マイケルホーマー

3
@Michael Homer:これはユニコード文字で動作するようになりました。
cuonglm 14

6

あなたが探しているものともっと一致すると思います 水平スクロール

Z は水平スクロールコマンドキーで、左または右矢印キーで移動する方向が続きます。

最初:set nowrapに行の折り返しを無効にします。その後、プレスz3535個のスペースをスクロールします。


これはログを読むときにとても便利です、ありがとう!
ファビオF. 14

わかりました、1ページに最適ですが、...カーソルを行の先頭に再度ジャンプさせずにページダウンまたはページアップを行う方法
エリッシュ

@ user2987828の回答でそれを行う方法を見つけました:使用:set nosol
エリッシュ

非表示にする最後の文字にカーソルを置きます。その後...入力[Esc] z s
roblogic

2

コマンドモードで、次を試してください。

:%s/^.\{35}//
  • %s/pat/sub/:それぞれの出現置き換えるパットをして subに
  • ^.\{35}:行の最初の35文字に一致

このコマンドは、各行の最初の35文字を削除します。あなたは読むことができる:h regular-expressionの正規表現の詳細についてはvim


1

バッファやファイルを変更することなく、覚えやすいソリューションがあります。L表示したいファイル部分の最初の文字(例では)にカーソルを置き、入力します

:set nowrap
zs

zsコマンド意志のセットアップviのカーソルで文字が画面の最初の列に表示されていることをするように。入力していないことを確認してください:set nosol構成ファイルをして。

g$コマンドは、カーソルを表示されている最後の列に移動します。

g0コマンドは、最初に表示される列、L.を含むものにカーソルをバックに移動します

いずれかのキーでカーソルを表示列の左右に移動すると、表示ウィンドウが移動します。


そして、g0コマンドが最初に表示される列にカーソルを移動します
elysch
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.