Bagaimana cara menambahkan lekukan panduan / garis

42

Di Sublime Text 2, Anda mendapatkan panduan vertikal di mana lekukan Anda berada, seperti ini:

Tangkapan layar Sublime Text

tetapi dalam vim saya jelas tidak:

tangkapan layar vim

Apakah ada cara untuk menunjukkan garis seperti itu di vim? Omong-omong, lekukan saya adalah 2 spasi.

:set tabstop=2 softtabstop=2 shiftwidth=2 expandtab
aharris88
sumber

Jawaban:

39

Jawaban terpadu:

Jika Anda menggunakan tab

Saya akan mencoba menggunakan listchars:

:set listchars=tab:\|\ 
:set list

Catatan: ada spasi setelah yang terakhir di \atas.

Metode ini bagus karena menggunakan dukungan bawaan Vim untuk menunjukkan hal semacam ini.

Contoh output:

|       if (1) {
|       |       func();
|       }

tangkapan layar sampel teks di atas

Namun, ini tidak berfungsi untuk memimpin ruang. Seperti yang ditunjukkan oleh @Josh Petrie, ada tambalan yang berfungsi untuk spasi , tetapi Anda harus mengkompilasi ulang Vim, yang berada di luar cakupan jawaban ini.

Jika Anda menggunakan spasi, dan tidak keberatan menggunakan plugin

Vaibhav Sagar menunjukkan plugin indentLine melakukan fungsi ini.

Instal dengan cara normal (lihat menginstal Plugin ) dan tampaknya secara ajaib hanya berfungsi tanpa input lebih lanjut. Jika Anda tidak keberatan dengan bilah ASCII, Anda tidak perlu melakukan apa pun dengan font Anda. Contoh output dari contoh Anda setelah pengaturan pengaturan lekukan Anda dan berjalan:IndentLinesReset

45   ¦ var move = function(direction) {
46   ¦ ¦ if(!initialized) { initialize(); }
47 
48   ¦ ¦ if(shiftBoard(direction)) {
49   ¦ ¦ ¦ setTimeout(addRandomPiece, 100);
50   ¦ ¦ }
51   ¦ };

tangkapan layar contoh dengan spasi

Plugin ini membutuhkan Vim 7.3 atau lebih baru, dan memanfaatkan fitur tersembunyi dari versi tersebut. Alih-alih menyembunyikan teks, teks menggantikan teks dengan bilah di tampilan, tetapi bukan buffer yang sebenarnya. Hasilnya adalah Anda melihat bilah tetapi tidak disimpan ke dalam file (karena sebenarnya spasi)

Peringatan

Kedua metode ini menganggap kode indentasi "benar". Mereka tidak menempatkan garis indentasi pada tingkat indentasi ketika "blok" dibuka (yang tampaknya dilakukan oleh sublim) tetapi menempatkan garis pada interval teratur berdasarkan pada pengaturan indentasi Anda. Selain itu, ini hanya menunjukkan bar pada garis di mana sebenarnya ada ruang (itulah sebabnya garis dalam output vim di bawah yang pertama iftidak memiliki bar, membuat kesenjangan visual)

John O'M.
sumber
Sebenarnya, saya menggunakan spasi untuk indentasi, bukan tab. Saya telah memperbarui pertanyaan saya.
aharris88
Oh Kalau begitu, itu akan membutuhkan lebih banyak penelitian.
John O'M.
1
Ada tambalan untuk membuat listchars berfungsi untuk ruang non-trailing, yang dapat Anda gali di milis. Namun, itu belum diterima ke dalam distribusi resmi :(
1
Jawaban yang diperbarui untuk memasukkan informasi dari Vaibhav Sagar dan Josh Petrie. Saya mencoba plugin Vaibhav yang disebutkan dan menunjukkan hasilnya dalam jawaban yang diedit. Saya pikir saya akan mulai menggunakan plugin ini sendiri. Itu tidak fantastis, tetapi secara umum tampaknya bekerja dengan cukup baik.
John O'M.
1
indentLine berfungsi dengan baik untuk python, json, viml, c, c ++, dll. Tapi sayangnya itu tidak berfungsi dengan vim-javascript, jadi saya vim-indent-guides saja.
Sassan
19

Opsi lain yang saya gunakan, yang tidak persis seperti yang Anda minta, tetapi mencapai tujuan yang sama untuk membuatnya lebih mudah untuk melihat apa yang ada di kolom yang sama, adalah untuk mengatur yang berikut di Anda vimrc:

set cursorcolumn
set cursorline

ilustrasi kursor kolom

Ini memiliki pertukaran yang harus Anda pindahkan kursor ke kolom yang ingin Anda lihat, tetapi Anda mendapatkan lebih sedikit kekacauan visual. Biasanya ketika saya peduli dengan level indentasi, saya tetap menjaga kursor saya. Cara saya juga tidak canggung dalam bahasa seperti python tanpa menutup kawat gigi.

Karl Bielefeldt
sumber
Pengguna Python vi akan mati untuk fitur ini
shuva
18

Demi kelengkapan, ada juga plugin Indent Guides , yang menunjukkan tingkat lekukan dengan mengganti warna ruang putih. Itu membutuhkan versi 7.2 atau yang lebih baru. Karena ia menggunakan variabel tabstopdan shiftwidth, itu mungkin akan berfungsi untuk pengaturan lekukan Anda segera.

Imgur

Setelah plugin diinstal, Anda cukup menggunakan :IndentGuidesEnableatau :IndentGuidesDisable. Jika Anda menggunakan terminal vim, perhatikan bahwa, sesuai dengan manual,

Saat ini Terminal Vim hanya memiliki dukungan dasar. Ini berarti bahwa warna tidak akan dihitung secara otomatis berdasarkan skema warna Anda. Sebagai gantinya, beberapa warna prasetel digunakan tergantung pada apakah latar diatur ke gelap atau terang.

Untuk mengubah warna panduan untuk tangkapan layar, saya menggunakan yang berikut ini

let g:indent_guides_auto_colors=0

sehingga warna tidak dihitung ulang ketika buffer ditukar, dan kemudian mengatur warna menggunakan

hi IndentGuidesEven ctermbg=238
hi IndentGuidesOdd ctermbg=236

Seperti dengan solusi lain yang disajikan, itu hanya menunjukkan panduan indent pada saluran jika ada spasi.

guillem
sumber
tambahkan let g:indent_guides_enable_on_vim_startup=1ke .vimrc saya untuk mengaktifkan ini saat startup.
inye
9

Saya telah menemukan plugin indentLine menjadi yang terbaik untuk ini. Anda memang membutuhkan font dengan simbol yang sesuai, saya menemukan Consolas di Windows dan Menlo di Mac OS X berfungsi dengan baik. Seperti yang ditunjukkan dalam jawaban terpadu di atas, ia bekerja dengan (ab) menggunakan concealfitur vim untuk meletakkan bilah vertikal (dari font yang digunakan) di tempat yang tepat. Saya cukup senang dengan solusi ini tetapi kerugiannya adalah bilah vertikal saya adalah bagian dari mesin terbang gambar kotak dan mereka berpusat di tengah bukannya di kiri seperti di editor lain. Saya sudah terbiasa tetapi bisa diperbaiki dengan menambal font Anda secara manual atau menggunakan font seperti Fantasque Sans Mono (perhatikan bagaimana screenshot di repo github yang terhubung menggunakan indentLine).

Vaibhav Sagar
sumber
4
Silakan lihat diskusi kami tentang jawaban hanya tautan-tautan dan pertimbangkan untuk memperbarui jawaban Anda dengan informasi lebih lanjut.
Kesalahan saya, saya telah memperbarui jawaban saya.
Vaibhav Sagar
Mesin terbang mana yang merupakan garis vertikal yang ditambal? Bisakah Anda menempelkannya di sini? Terima kasih.
Timtro
2

Plugin indentLine cenderung lambat pada file-file non-kecil, yang dapat diamati ketika mengklik enter karena tertinggal satu detik atau lebih.

Saya telah menemukan vim-indentguides sebagai plugin yang lebih cepat dan serupa secara visual, yang juga secara visual membedakan indentasi tab versus indentasi ruang.

Jaybay
sumber