vim: sembunyikan n huruf pertama dari semua baris dalam file


12

Saya menganalisis file log menggunakan vim dan formatnya terlihat seperti ini

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

Karena Sebagian besar waktu saya tidak peduli tentang tanggal dan waktu. Saya ingin menyembunyikannya dan hanya fokus pada kolom Nama dan LogTeks (Untuk menyimpan beberapa layar). Karena tiga kolom pertama selalu menempati 35 huruf pertama dalam satu baris. Apakah ada cara untuk membuat vim tidak menampilkan 35 huruf pertama dari setiap baris?


Saya tidak tahu bagaimana Anda melakukannya di vim, tetapi jika Anda tidak keberatan membuat file sementara, Anda bisa menjalankan cut -c36- logfile > logfile_with_first_35_chars_missing, dan kemudian tinjau itu.
Warwick

Jawaban:


7

Anda bertanya tentang cara menyembunyikan huruf pertama, tidak menghapusnya, atau menggulirnya agar tidak terlihat - jadi inilah cara menyembunyikannya:

Sembunyikan teks dalam vim menggunakan menyembunyikan

Anda dapat menggunakan pencocokan , dikombinasikan dengan penyorotan sintaksis dan fitur penyembunyian untuk benar-benar tidak menampilkan karakter yang cocok di dalam garis.

Untuk menyembunyikan 25 karakter pertama dari setiap baris:

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

Untuk menyembunyikan baris dengan tanda baca saja sebagai gantinya:

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

Untuk menyembunyikan:

:syn clear Concealed
:set conceallevel=0

Seperti apa biasanya ini:

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

akan terlihat seperti ini setelah menjalankan dua perintah pertama:

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


Lihat juga - di dalam vim:
help :syn-match
help :syn-conceal
help 'conceallevel'
help 'concealcursor'


(Beri tahu saya jika tidak berperilaku seperti itu - mungkin ada beberapa pengaturan yang tidak saya sadari atau lebih - saya akan membuatnya bekerja.)


1
Bekerja dengan baik, saya pikir vim perlu dikompilasi dengan +concealopsi (milik saya) agar ini berfungsi. Juga bagus untuk set concealcursor=ncmencegah garis kursor membesar.
user881300

Ya, +concealopsi fitur standar seperti beberapa tahun. Sedih karena itu tidak lebih terkenal sekarang. Ini sangat bagus dan fleksibel. Memberikan banyak opsi baru ...
Volker Siegel

8

Gunakan fungsionalitas filter vim . Lari:

:%!cut -b36-

untuk menjalankan konten buffer Anda melalui cutperintah, hanya mempertahankan byte 36 dan seterusnya. %artinya menjalankan seluruh buffer melalui dan mengganti isinya dengan output, lalu! adalah perintah filter, dengan sisa baris sebagai program untuk dijalankan. Ini tidak mengubah file yang mendasarinya kecuali Anda menyimpan buffer di atasnya.

Untuk mendapatkan kembali buffer yang tidak terpotong asli yang dapat Anda gunakan :e, asalkan didukung oleh file asli.


Dan kemudian gunakan %!cat %untuk mendapatkannya kembali? Ini berfungsi dengan baik dan saya dapat menggunakan mapuntuk beralih di antara keduanya
user881300

Ya, itu akan berhasil, selama Anda memiliki file nyata yang mendukung buffer Anda.
Michael Homer

3
@Michael Homer: Sekarang ini akan berfungsi dengan karakter unicode.
cuonglm

6

Saya pikir lebih sesuai dengan apa yang Anda cari adalah pengguliran horizontal .

Z adalah tombol perintah gulir horizontal, diikuti oleh arah untuk bergerak dengan tombol panah kiri atau kanan.

Pertama :set nowrap menonaktifkan pembungkus baris. Kemudian tekan z, 35, untuk menggulir 35 ruang.


Ini sangat berguna saat membaca log, terima kasih!
Fabio F.

ok, bagus untuk satu halaman, tapi ... Bagaimana cara melakukan page down atau naik tanpa kursor melompat lagi ke awal baris?
elysch

baru saja menemukan cara melakukannya di jawaban @ user2987828: using:set nosol
elysch

Tempatkan kursor pada karakter terakhir yang ingin Anda sembunyikan. Kemudian ketik ...[Esc] z s
roblogic

2

Dalam mode perintah, coba:

:%s/^.\{35}//
  • %s/pat/sub/: ganti setiap kemunculan tepuk dengan sub
  • ^.\{35}: cocokkan 35 karakter baris pertama

Perintah ini menghapus 35 karakter pertama dari setiap baris. Anda dapat membaca :h regular-expressionuntuk detail lebih lanjut tentang ekspresi reguler di vim.


1

Ada solusi yang mudah diingat, tanpa memodifikasi buffer atau file. Tempatkan kursor Anda pada karakter pertama ( Lpada contoh Anda) dari bagian file yang ingin Anda lihat, lalu ketik

:set nowrap
zs

The zsperintah akan setup vi sehingga bahwa karakter dengan muncul kursor pada kolom pertama dari layar. Pastikan Anda tidak mengetik:set nosol file konfigurasi Anda.

Itu g$ perintah akan memindahkan kursor ke kolom yang terlihat terakhir.

Itu g0 perintah akan bergerak kembali kursor ke kolom pertama terlihat, yang mengandung L.

Jika ada tombol yang memindahkan kursor ke kiri atau kanan keluar dari kolom yang terlihat, maka jendela yang terlihat akan bergeser.


Dan g0perintah akan memindahkan kursor Anda ke kolom pertama yang terlihat
elysch
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.