Bagaimana cara mengubah ukuran tab di Vim?

172

Setiap kali saya menambahkan pemilih dalam CSS dan saya menekan Enteruntuk menentukan properti itu berakhir seperti ini:

#selector {
        property: value;
}

(Tab 8 ruang)

Bagaimana saya bisa mengkonfigurasi Vim agar seperti ini:

#selector {
    property: value;
}

(Tab 4 spasi)

alexchenco
sumber
4
Apakah Anda ingin satu tab dengan lebar 4 spasi? Empat ruang? Atau empat tab dengan lebar 1 spasi? Itu hal yang berbeda, dan Anda tidak jelas. Dalam hal apa pun, mulailah dengan membaca: ia ts,: ia sw, dan: ia mengembang
abeyer

Jawaban:

102

Memperluas jawaban zoul:

Jika Anda ingin mengatur Vim untuk menggunakan pengaturan spesifik saat mengedit tipe file tertentu, Anda ingin menggunakan perintah otomatis:

autocmd Filetype css setlocal tabstop=4

Ini akan membuatnya sehingga tab ditampilkan sebagai 4 spasi. Pengaturan expandtabakan menyebabkan Vim untuk benar-benar memasukkan spasi (jumlah mereka yang dikendalikan oleh tabstop) ketika Anda menekan tab; Anda mungkin ingin menggunakannya softtabstopuntuk membuat backspace berfungsi dengan baik (yaitu, kurangi indentasi saat itulah yang akan terjadi jika tab digunakan, daripada selalu menghapus satu karakter sekaligus).

Untuk membuat keputusan yang berpendidikan sepenuhnya bagaimana untuk mengatur segalanya, Anda harus membaca Vim docs pada tabstop, shiftwidth, softtabstopdan expandtab. Bit paling menarik ditemukan di bawah expandtab( :help 'expandtab):

Ada empat cara utama untuk menggunakan tab di Vim:

  1. Pertahankan 'tabstop' di 8, atur 'softtabstop' dan 'shiftwidth' ke 4 (atau 3 atau apa pun yang Anda suka) dan gunakan 'noexpandtab'. Kemudian Vim akan menggunakan campuran tab dan spasi, tetapi mengetik dan akan berperilaku seperti tab muncul setiap 4 (atau 3) karakter.

  2. Set 'tabstop' dan 'shiftwidth' ke apa pun yang Anda suka dan gunakan 'expandtab'. Dengan cara ini Anda akan selalu memasukkan spasi. Format tidak akan pernah berantakan ketika 'tabstop' diubah.

  3. Set 'tabstop' dan 'shiftwidth' ke apa pun yang Anda suka dan gunakan | modeline | untuk mengatur nilai-nilai ini saat mengedit file lagi. Hanya berfungsi saat menggunakan Vim untuk mengedit file.

  4. Selalu atur 'tabstop' dan 'shiftwidth' ke nilai yang sama, dan 'noexpandtab'. Ini kemudian akan bekerja (hanya untuk indentasi awal) untuk pengaturan tabstop yang digunakan orang. Mungkin menyenangkan untuk memiliki tab setelah spasi pertama yang dimasukkan sebagai ruang kosong jika Anda melakukannya. Kalau tidak, komentar yang selaras akan salah ketika 'tabstop' diubah.

Michał Marczyk
sumber
Juga, jangan terlalu khawatir tentang kemungkinan berubah pikiran nanti ... lihat :help retab(periksa varian!).
Michał Marczyk
Apakah penggunaan autocmd komplementer dengan menggunakan .vimrc, atau alternatif?
Josh Desmond
224
:set tabstop=4
:set shiftwidth=4
:set expandtab

Ini akan menyisipkan empat spasi alih-alih karakter tab. Spasi sedikit lebih “stabil”, artinya teks yang diindentasi dengan spasi akan muncul sama di browser dan aplikasi lainnya.

zoul
sumber
83
Ya, tetapi tab bersifat semantik (masing-masing tab berarti 1 lapisan lekukan), sedangkan spasi murni bersifat presentasional. Atau dengan kata lain, menggunakan tab akan membuat orang lain melihat kode Anda untuk menampilkan seberapa luas mereka merasa nyaman, sedangkan spasi tidak mengizinkan ini.
K Prime
11
Perhatikan bahwa jika Anda lebih suka '>' dan '<' untuk memindahkan teks Anda dengan jarak yang sama dengan tombol- tab , Anda dapat dengan mudah :set shiftwidth=0di vimrc Anda dan melupakannya selamanya, karena ini memberitahu vim bahwa Anda selalu ingin mencocokkannya tabstop.
SeldomNeedy
132

Untuk membuat perubahan untuk satu sesi, gunakan perintah ini:

:set tabstop=4

Untuk membuat perubahan itu permanen, tambahkan ke ~/.vimrcatau ~/.vim/vimrc:

set tabstop=4

Ini akan memengaruhi semua file, bukan hanya css. Untuk hanya memengaruhi file css:

autocmd Filetype css setlocal tabstop=4

sebagaimana dinyatakan dalam jawaban Michał .

Keith
sumber
2
jika Anda ingin tab berfungsi sebagai empat spasi, perlu menambahkan baris lain dalam jawaban @Zoul ke .vimrc juga; yaitu, tambahkan 'set shiftwidth = 4' dan 'set expandtab' ke .vimrc juga.
qartal
7
Pertanyaannya adalah "Bagaimana cara mengubah ukuran tab di Vim?"
Keith
Inilah yang akan saya lakukan. Dan untuk memastikan ~/.vimrcselalu dicadangkan, saya biasanya menyimpan file di folder Dropbox saya lalu membuat tautan sym ke desktop:ln -s /home/myfolder/Dropbox/.vimrc ~
enchance
41

Beberapa jawaban di halaman ini adalah perbaikan 'sekali pakai' untuk masalah yang dijelaskan. Artinya, saat berikutnya Anda membuka dokumen dengan vim, pengaturan tab sebelumnya akan kembali.

Jika ada yang tertarik untuk mengubah pengaturan tab secara permanen:

Alexander McNulty
sumber
11
Ini memasukkan spasi, bukan tab.
Supernovah
5
@Supernovah Anda dapat menghapus "expandtab", untuk mendapatkan tab
kommradHomer
28

Sebagai one-liner ke vim :

:set tabstop=4 shiftwidth=4 expandtab

Untuk pengaturan permanen , tambahkan baris ini ke ~ / .vimrc :

set tabstop=4
set shiftwidth=4
set expandtab
oz19
sumber
6

MEMPERBARUI

Jika Anda bekerja di proyek tertentu, saya sangat merekomendasikan menggunakan editorconfig .

Ini memungkinkan Anda menentukan .editorconfigfile di root repositori Anda, menentukan lekukan yang ingin Anda gunakan untuk setiap jenis file di repositori Anda.

Sebagai contoh:

root = true

[*.css]
charset = utf-8
indent_style = space
indent_size = 4

[*.js]
charset = utf-8
indent_style = space
indent_size = 2

Ada plugin vim yang secara otomatis mengkonfigurasi vim sesuai dengan file konfigurasi untuk file yang Anda buka.

Selain itu, .editorconfigfile tersebut didukung secara otomatis pada banyak IDE dan editor lain sehingga ini merupakan opsi terbaik untuk berkolaborasi antara pengguna dengan lingkungan yang berbeda.

JAWABAN ASLI

Jika Anda perlu mengubah ukuran sering dan Anda tidak ingin mengikat ini ke jenis file tertentu, Anda dapat memiliki perintah yang telah ditentukan pada file .vimrc Anda untuk dengan cepat beralih preferensi:

nmap <leader>t :set expandtab tabstop=4 shiftwidth=4 softtabstop=4<CR>
nmap <leader>m :set expandtab tabstop=2 shiftwidth=2 softtabstop=2<CR>

Ini memetakan dua set ukuran yang berbeda untuk tombol \ t dan \ m. Anda dapat mengubah ini menjadi kunci apa pun yang Anda inginkan.

Jens
sumber