Menampilkan tab sebagai karakter


119

Ketika saya bekerja pada file dengan python, saya terkadang mengira tab untuk spasi dan sebaliknya. Apakah ada cara saya bisa membuat Vim menampilkan karakter untuk tab, bukan tab?


Sama seperti catatan tambahan, Anda dapat mengonfigurasi untuk mengonversi semua tab menjadi spasi dengan retabsetiap kali Anda menyimpan file.
0xc0de

Jika Anda telah menginstal vim-faq , Anda bisa mendapatkan jawaban offline di sana: :h vim-faqdan cari /invisible. Tag yang sulit diingat adalah :h faq-19.8.
Hotschke

Jawaban:


119

Ya, gunakan listchars:

set list
set listchars=tab:>-

Jika Anda meletakkan dua baris ini di .vimrc Anda, tab akan ditampilkan >untuk posisi awal dan -melalui sisa tab.

(Sidenote: listchars juga dapat menampilkan spasi tambahan trail:x(ganti xdengan karakter yang ingin Anda gunakan untuk spasi tambahan), yang dapat berguna juga.)


6
Catatan: Saya suka menggunakan set listchars=tab:!·,trail:·, IMHO ·jauh lebih jelas daripada -... Anda memerlukan versi Vim yang cukup baru untuk ini berfungsi dengan baik (tidak yakin yang mana, saya pikir 7.3.x) ...
Martin Tournoij

8
Saya suka menggunakan karakter unicode karena sedikit lebih kecil dari >. Saat ini saya melihat spasi putih dengan menandai eol (meskipun saya dapat mencoba di atas). Pengaturan saya adalah: set listchars=eol:¬,tab:▸\ dan
Martin York

58

Jawaban dasarnya adalah :set list, yang menyebabkan tab ditampilkan sebagai ^I.

Namun, saya sarankan lebih dari itu. Just :set listbermasalah karena gagal mempertahankan penyelarasan visual di layar. Sebagai contoh:

%.o: %.cpp
^Ig++ -c $<

tidak terlihat baik, terutama ketika Anda mengharapkan gdari g++muncul di bawah pertama pdari cpp(asumsi tabstop=8).

Oleh karena itu, saya sarankan .vimrcAnda memasukkan sesuatu :set listchars=tab:␉· (Untuk lebih jelasnya, itu adalah karakter Unicode U + 2409 SIMBOL UNTUK TABULASI HORIZONTAL diikuti oleh U + 00B7 MIDDLE DOT .)

Seperti dijelaskan dalam :help listchars, pengaturan dua karakter untuk tab:xymenyebabkan perataan visual dipertahankan:

tab:xy        Two characters to be used to show a tab.  The first
              char is used once.  The second char is repeated to
              fill the space that the tab normally occupies.
              "tab:>-" will show a tab that takes four spaces as
              ">---".  When omitted, a tab is show as ^I.

Contoh di atas akan muncul di layar sebagai:

%.o: %.cpp
␉·······g++ -c $<

Secara pribadi, saya habis-habisan dengan listchars:

:set listchars=eol:⏎,tab:␉·,trail:␠,nbsp:⎵

Karakter-karakter ini cukup khas sehingga jarang muncul secara harfiah dalam teks dokumen.

Untuk mengetikkan karakter khusus ini ke dalam Anda vimrc, ketikkan Ctrl-vu23CEsaat dalam Mode Sisipkan, seperti yang dijelaskan dalam :help utf-8-typing.


2
Lihat jugaset lcs=tab:├─
sch

ini hanya memberi saya? at eol
WendyG

14

Menyorot tab

TabSorotan sementara

Untuk penggunaan sesekali, seseorang cukup menyorot semua tab dalam dokumen menggunakan /perintah pencarian berikut :

/\t

Untuk menghapus penyorotan, cukup ketik :nohyang merupakan kependekan dari :nohlsearch—tidak ada pencahayaan yang tinggi.

TabPenyorotan permanen

" Highlight tabs as errors.
" https://vi.stackexchange.com/a/9353/3168
match Error /\t/

Penyorotan tab di vim

Lebih banyak sorotan

Untuk lebih banyak dari perintah penyorotan yang berguna ini - termasuk dikombinasikan dengan trailing spasi putih dan menjadikan ini permanen - lihat Vim wiki .


4
Anda juga dapat menggunakan :match Error /\t/untuk menyorot tab (atau pola lain apa pun) secara terpisah dari register pencarian dan hlsearch (ketik :matchuntuk menghapusnya).
Martin Tournoij

1
@Carpetsmoker One dapat menemukan jauh lebih banyak dari perintah penyorotan yang berguna ini (termasuk dikombinasikan dengan trailing spasi putih!) Pada wiki Vim tentang menyoroti ruang yang tidak diinginkan .
Serge Stroobandt

9

Saya pribadi suka menggunakan plugin indentLine , yang menampilkan garis vertikal pada level indentasi.

Ini sangat membantu terutama dalam python, di mana lekukan itu penting.

(Gambar diambil dari tautan di atas)

Di antaranya, ia menyediakan perintah sakelar, yang dapat dipetakan ke kombinasi tombol, sehingga Anda dapat mematikannya, saat Anda tidak membutuhkannya.


2
Saya percaya plugin ini ditujukan untuk spasi indentasi?
Jake Byman

5

Anda mungkin ingin menampilkan tab secara berbeda di terminal reguler dan gvim.

set list!
if has('gui_running')
    set listchars=tab:▶\ ,trail:·,extends:\#,nbsp:.
else
    set listchars=tab:>.,trail:.,extends:\#,nbsp:.
endif

(Menambahkan untuk kelengkapan, seandainya orang lain merasa berguna).


4

Metode termudah adalah melakukan :set list, yang akan menampilkan tab as ^Idan end of line sebagai $.

Saya suka menggunakan pemetaan yang memanggil

:set invlist 

untuk beralih antara tampilan biasa dan tampilan daftar.

Sebagai contoh:

:nmap <leader>l :set invlist<cr>

Ini memungkinkan saya untuk dengan cepat memeriksa apakah ada masalah tab vs space dan kemudian kembali ke tampilan biasa.

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.