Ukuran tab Vim ketika menekan <Tab> dan ketika autoindent berlaku

22

Saya memutuskan untuk mengubah ukuran tab dari 4 menjadi 2, karena mengapa tidak? Siapa pun yang ingin melihat kode pasti dapat menggunakan preferensi mereka.

Namun, sebuah pertanyaan.

Jika saya menekan tombol tab, ia menyisipkan 2, tetapi autoindent Vim masih menempatkan 4. Apa yang saya ubah untuk membuatnya 2?

Pertanyaan lain yang tidak terkait: Gaya indentasi mana yang terbaik untuk bahasa C dan yang sejenis? Saya telah menggunakan 1TBS, tetapi ada begitu banyak untuk dipilih. Apakah ada di antara mereka yang lebih profesional atau disukai?

pengguna341814
sumber

Jawaban:

17

Coba atur ' shiftwidth' ke nilai yang sama dengan ' tabstop'. Lebih baik lagi, jika Anda menggunakan versi Vim yang cukup baru-baru ini, atur ' shiftwidth' ke 0 dan akan default ke apa pun yang ' tabstop' diatur ke.

Heptite
sumber
Ini yang saya cari. Saat ini memperdebatkan antara pengaturan tssebagai 2, 4, atau 8
user341814
Saya menggunakan 8 pada file non-kode, dan 2 atau 4 tergantung pada bahasa dan berapa banyak cenderung bersarang terjadi.
Heptite
Saya hanya melakukan C saat ini.
user341814
33

Opsi indentasi Vim

Vim terutama menggunakan 3 pengaturan untuk ukuran indentasi:

  • tabstop, ts: ketika Vim menemukan tabulasi dalam file yang Anda buka, tab ini menampilkan tab sebagai {ts} spasi (lihat bantuan tabstop , atau ketikkan :help tabstopVim).
  • softtabstop, sts: ketika Anda mengedit file dan menekan tombol tab, Vim menggunakan pengaturan ini untuk menentukan lebar tabulasi yang dimasukkan (lihat bantuan softtabstop , atau ketik :help softtabstopVim).
  • shiftwidth, sw: Jumlah ruang Vim menggunakan ketika indentasi, baik menggunakan barang-barang autoindent atau biasa >>, <<perintah. Seperti yang diperhatikan oleh Heptite, inilah yang Anda cari dalam kasus khusus ini. Dan versi terbaru Vim memang memungkinkan Anda untuk tidak menentukan opsi ini, shiftwidthkemudian akan mengambil nilai yang ditentukan olehtabstop . Cukup praktis (lihat bantuan shiftwidth ).

Contoh

Jadi misalnya, jika Anda menggunakan pengaturan berikut:

set sts=4
set ts=2
set sw=8

Ini akan menghasilkan perilaku berikut:

  1. Memasukkan tabulasi dalam file akan menghasilkan lebar 4 spasi indentasi.
  2. Saat Anda tabstopdiatur ke 2, ini sebenarnya akan setara dengan 2 tabulasi. Ini cukup mudah untuk diperiksa, cukup gunakan opsi listdan listcharsuntuk menampilkan tabulasi.
  3. Jika Anda membuat garis menggunakan >>, lekukan akan menjadi 8 spasi (karenanya, setara dengan 4 tabulasi, berdasarkan tabstopnilai, sama seperti di atas).

masukkan deskripsi gambar di sini

Rekomendasi indentasi Vim (dari dokumentasi Vim)

Dari tabstopbantuan ( :help tabstopdalam Vim):

There are four main ways to use tabs in Vim:
  1. Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4
    (or 3 or whatever you prefer) and use 'noexpandtab'.  Then Vim
    will use a mix of tabs and spaces, but typing <Tab> and <BS> will
    behave like a tab appears every 4 (or 3) characters.
  2. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use
    'expandtab'.  This way you will always insert spaces.  The
    formatting will never be messed up when 'tabstop' is changed.
  3. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use a
    |modeline| to set these values when editing the file again.  Only
    works when using Vim to edit the file.
  4. Always set 'tabstop' and 'shiftwidth' to the same value, and
    'noexpandtab'.  This should then work (for initial indents only)
    for any tabstop setting that people use.  It might be nice to have
    tabs after the first non-blank inserted as spaces if you do this
    though.  Otherwise aligned comments will be wrong when 'tabstop' is
    changed.

Saya pribadi menggunakan solusi kedua, dengan tabulasi lebar 2 spasi.

set ts=2
set sts=2
set et     "expand tabs to spaces
pabuisson
sumber
-1

Menurut http://vim.wikia.com/wiki/Indenting_source_code , perintah 'filetype plugin indent on' akan menyebabkan program menggunakan skrip indentasi spesifik filetype yang terletak di subdirektori indent instalasi Vim. Halaman itu juga menyatakan bahwa 'cindent' digunakan secara otomatis dalam file C dan C ++, dan Anda tidak perlu menggunakan perintah itu secara manual.

Saya tidak terlalu terbiasa dengan Vim, karena saya hanya menggunakannya untuk beberapa penyuntingan teks dasar sesekali, tetapi saya akan mencoba secara manual mengeluarkan perintah 'cindent' untuk menggunakan ukuran autoindent default Vim untuk kode itu. Jika itu tidak berhasil, Anda bisa mencoba 'filetype indentasi pada' dan mengedit skrip sendiri untuk mendapatkan indentasi yang diinginkan.

Kyle
sumber