Tetapkan ulang tab sebagai 4 spasi

1095

Pengaturan saya saat ini mengasumsikan 8 spasi; bagaimana saya bisa mendefinisikannya kembali?

Ricky
sumber
4
Lebih baik lagi, atur ke empat spasi dan aktifkan indentasi secara bersamaan: Indentasi otomatis dengan tabwidth diatur ke 4 spasi
solid_liq
7
@ heinrich5991 Saya tidak mengerti. Saya tidak perlu 8 spasi untuk menyadari bahwa sebuah baris di-indentasi, dan lebih dari itu berarti membatasi karakter yang dapat Anda lihat pada baris teks yang panjang (setidaknya sebelum membungkus). Tetapi untuk masing-masing miliknya. :)
weberc2
40
@ heinrich5991 Argumen saya adalah "gunakan sesedikit mungkin untuk dengan mudah mengidentifikasi baris indentasi". Menurut perkiraan saya, kemampuan seseorang untuk dengan mudah mengidentifikasi lekukan turun dengan cepat pada <3 spasi, dan berhenti meningkat pada 4 spasi. Karena itu, lekukan yang melebihi 4 spasi adalah pemborosan, menurut pengalaman saya.
weberc2
7
@ weberc2 Tidak mungkin setuju lebih banyak, sobat. Itulah sebabnya saya merasa sangat sumpek membaca Ruby atau "JavaScript modern", yang masing-masing menggunakan 2 spasi untuk lekukan. Itu sah memberi saya ketegangan mata ketika mencoba mengikuti struktur bersarang berat. Tab keras untuk menang.
Kemungkinan duplikat Ganti Tab dengan Ruang di VIM
rofrol

Jawaban:

1617

Itu tergantung pada apa yang Anda maksudkan. Apakah Anda ingin karakter tab yang sebenarnya dalam file Anda muncul 4 spasi lebar, atau dengan "tab" maksud Anda sebenarnya indent , yang dihasilkan dengan menekan tombol tab, yang akan menghasilkan file yang secara harfiah berisi (hingga) 4 karakter spasi untuk setiap "tab" yang Anda ketik?

Bergantung pada jawaban Anda, salah satu dari set pengaturan berikut ini akan berfungsi untuk Anda:

  • Untuk karakter tab yang muncul selebar 4 spasi :

    set tabstop=4
    

    Jika Anda menggunakan karakter tab aktual dalam kode sumber Anda, Anda mungkin juga menginginkan pengaturan ini (ini sebenarnya adalah default, tetapi Anda mungkin ingin mengaturnya secara defensif):

    set softtabstop=0 noexpandtab
    

    Terakhir, jika Anda ingin indentasi berkorespondensi dengan satu tab, Anda juga harus menggunakan:

    set shiftwidth=4
    
  • Untuk indentasi yang terdiri dari 4 karakter spasi tetapi dimasukkan dengan tombol tab:

    set tabstop=8 softtabstop=0 expandtab shiftwidth=4 smarttab
    

Untuk membuat pengaturan di atas permanen, tambahkan baris-baris ini ke vimrc Anda .

Jika Anda perlu melakukan penyesuaian, atau hanya ingin memahami apa arti semua opsi ini, berikut adalah rincian dari arti setiap opsi:

tabstop

Lebar tabstop keras diukur dalam "spasi" - efektif lebar (maksimum) karakter tab yang sebenarnya.

shiftwidth

Ukuran "indent". Ini juga diukur dalam spasi, jadi jika basis kode Anda indentasi dengan karakter tab maka Anda ingin shiftwidthmenyamakan jumlah karakter tab kali tabstop. Ini juga digunakan oleh hal-hal seperti =, >dan <perintah.

softtabstop

Menyetel ini ke nilai bukan nol selain tabstopakan membuat tombol tab (dalam mode penyisipan) menyisipkan kombinasi spasi (dan mungkin tab) untuk mensimulasikan penghentian tab pada lebar ini.

expandtab

Mengaktifkan ini akan membuat tombol tab (dalam mode sisipan) menyisipkan spasi alih-alih karakter tab. Ini juga mempengaruhi perilaku retabperintah.

smarttab

Mengaktifkan ini akan membuat tombol tab (dalam mode penyisipan) menyisipkan spasi atau tab untuk pergi ke indentasi berikutnya dari tabstop berikutnya ketika kursor berada di awal baris (yaitu, satu-satunya karakter sebelumnya adalah spasi).

Untuk detail lebih lanjut tentang semua ini, lihat di vim (misalnya ):help 'optionname':help 'tabstop'

Laurence Gonsalves
sumber
18
Penting juga untuk memastikan bahwa Makefiles selalu menggunakan karakter tab yang keras, jika tidak build akan gagal! Saya telah menunjukkan caranya, di stackoverflow.com/questions/234564/…
Shervin Emami
29
@Difinisikan Itulah pengaturan vim sistem. ~/.vimrcadalah pengaturan vim pengguna. Kebanyakan orang membiarkan pengaturan sistem sendiri dan hanya mengedit pengaturan pengguna. Catatan yang ~/.vimrctidak akan ada sampai Anda membuatnya di sebagian besar sistem.
Laurence Gonsalves
4
Pengguna Vim memperhatikan set softtabstop=4fitur ini! Saya bosan mencoba membaca kode Anda dengan less, atau editor lain kecuali vim, hanya untuk melihat indentasi aneh karena Anda mendefinisikan ulang tab menjadi beberapa spasi acak (meskipun sistem lain berpikir sebaliknya)! :-)
Ogre Psalm33
6
Dapatkah seseorang membantu saya memahami mengapa jawaban ini mengatakan digunakan tabstop=8untuk indentasi yang terdiri dari 4 spasi? Saya tidak bisa mendapatkan alasannya setelah membaca deskripsi berbagai pengaturan. Jawaban lain mengatakan menggunakan tabstop=4yang lebih masuk akal bagi saya.
Kodos Johnson
5
@KodosJohnson tabstopOpsi mengontrol lebar karakter tab keras. Jika Anda ingin indentasi Anda terdiri dari 4 karakter spasi, daripada karakter tab tunggal yang lebar 4, maka lebar karakter tab Anda tidak masalah - semacam . Dalam praktiknya, Anda mungkin ingin lebar karakter tab Anda berbeda dari lebar indentasi Anda, untuk mengurangi kemungkinan karakter tab menyamar sebagai indentasi yang tepat. ( list+ expandtabdapat membantu di sini juga) Juga, tab 8-char-wide adalah "standar" - terminal Anda, Python, dan banyak alat lain default ke 8-char-wide-tab.
Laurence Gonsalves
746

Untuk menetapkan ini secara permanen untuk pengguna saat ini, buat (atau edit) .vimrcfile:

$ vim ~/.vimrc

Kemudian, rekatkan konfigurasi di bawah ini ke dalam file. Setelah vim dimulai kembali, pengaturan tab akan berlaku.

set tabstop=4       " The width of a TAB is set to 4.
                    " Still it is a \t. It is just that
                    " Vim will interpret it to be having
                    " a width of 4.

set shiftwidth=4    " Indents will have a width of 4

set softtabstop=4   " Sets the number of columns for a TAB

set expandtab       " Expand TABs to spaces
Alan Haggai Alavi
sumber
Jika Anda tidak memiliki ~ / .vimrc, coba dengan / etc / vim / vimrc. Dalam kasus saya di Ubuntu 16.04 file konfigurasi ada di sana. Namun perlu diingat bahwa mengubah file ini akan menyebabkan konfigurasi digunakan secara global.
Todor Todorov
5
Satu hal lagi, gunakan :retabuntuk mengkonversi yang sudah ada tabke spaces. vim.wikia.com/wiki/Converting_tabs_to_spaces
DawnSong
57

atau singkatan untuk vim modeline:

vim :set ts=4 sw=4 sts=4 et :
zen
sumber
28

Ada beberapa pengaturan yang menentukan apakah akan menggunakan spasi atau tab.

Jadi di sini adalah fungsi praktis yang dapat didefinisikan dalam ~/.vimrcfile Anda :

function! UseTabs()
  set tabstop=4     " Size of a hard tabstop (ts).
  set shiftwidth=4  " Size of an indentation (sw).
  set noexpandtab   " Always uses tabs instead of space characters (noet).
  set autoindent    " Copy indent from current line when starting a new line (ai).
endfunction

function! UseSpaces()
  set tabstop=2     " Size of a hard tabstop (ts).
  set shiftwidth=2  " Size of an indentation (sw).
  set expandtab     " Always uses spaces instead of tab characters (et).
  set softtabstop=0 " Number of spaces a <Tab> counts for. When 0, featuer is off (sts).
  set autoindent    " Copy indent from current line when starting a new line.
  set smarttab      " Inserts blanks on a <Tab> key (as per sw, ts and sts).
endfunction

Pemakaian:

:call UseTabs()
:call UseSpaces()

Untuk menggunakannya per ekstensi file, sintaks berikut dapat digunakan (ditambahkan ke .vimrc):

au! BufWrite,FileWritePre *.module,*.install call UseSpaces()

Lihat juga: Mengubah tab menjadi spasi .


Berikut ini cuplikan lain dari Wikia yang dapat digunakan untuk beralih antara tab dan spasi :

" virtual tabstops using spaces
set shiftwidth=4
set softtabstop=4
set expandtab
" allow toggling between local and default mode
function TabToggle()
  if &expandtab
    set shiftwidth=8
    set softtabstop=0
    set noexpandtab
  else
    set shiftwidth=4
    set softtabstop=4
    set expandtab
  endif
endfunction
nmap <F9> mz:execute TabToggle()<CR>'z

Ini memungkinkan menggunakan 4 spasi untuk setiap tab dan pemetaan F9untuk beralih pengaturan.

kenorb
sumber
27

Saya menyalin dan menempel ini ke file .vimrc saya:

" size of a hard tabstop
set tabstop=4

" always uses spaces instead of tab characters
set expandtab

" size of an "indent"
set shiftwidth=4

2 pengaturan pertama berarti bahwa ketika saya menekan Tab, saya mendapatkan 4 spasi. Pengaturan ketiga berarti bahwa ketika saya melakukannya V>(yaitu visual dan indentasi) saya juga mendapatkan 4 spasi.

Tidak selengkap jawaban yang diterima tetapi mungkin membantu orang yang hanya ingin menyalin dan menempelkan sesuatu.

Snowcrash
sumber
14

Masukkan pengaturan yang Anda inginkan dalam file ~ / .vimrc - Lihat di bawah untuk beberapa panduan dan praktik terbaik.

Ada empat cara utama untuk menggunakan tab di Vim:

  1. Selalu pertahankan 'tabstop' di 8, set '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.

    Catatan: Mengatur 'tabstop' ke nilai selain 8 dapat membuat file Anda tampak salah di banyak tempat (misalnya, saat mencetaknya).

  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. Jika tidak, komentar yang selaras akan salah saat 'tabstop' diubah.

Sumber:

Pemikiran elastis
sumber
+1 untuk menjelaskan mengapa pengaturan tabstop! = 8 bisa buruk!
Ogre Psalm33
3
Ini bagus, tetapi Anda harus mencatat bahwa ini kata demi kata dari vimdoc.sourceforge.net/htmldoc/options.html#'tabstop 'atau :help tabstopdalam vim.
belacqua
6

Tambahkan baris
set ts=4
dalam
~/.vimrcfile untuk per pengguna
atau
/etc/vimrcfile untuk seluruh sistem

Alok Singh Mahor
sumber
2

Dasar saya ~ / .vimrc dengan komentar:

set number " show line number                                                                                           
set tabstop=2 " set display width of tab; 1 tab = x space with                                                           
set expandtab " transform tab to x space (x is tabstop)                                                               
set autoindent " auto indent; new line with number of space at the beginning same as previous                                                                      
set shiftwidth=2 " number of space append to lines when type >> 
o0omycomputero0o
sumber
0

Permanen untuk semua pengguna (saat Anda sendirian di server):

# echo "set tabstop=4" >> /etc/vim/vimrc

Biasanya di server baru apt-get purge nano mcdan yang lainnya untuk menghemat waktu Anda. Kalau tidak, Anda akan mendefinisikan ulang editor git, crontabdll

Vasilii Suricov
sumber
1
Jika Anda mengatur EDITOR, sebagian besar program akan menghargainya.
D. Ben Knoble
@ D.BenKnoble kamu benar. saya sudah mencoba. untuk sekarang saya lebih suka menghemat waktu dan saraf saya. tidak dapat memeriksa apa sebenarnya berjalan dengan F10di nanotetapi saya selalu melakukan beberapa trik dengan save (mungkin F10adalah solusi). atau tidak berhasil screen? Saya tidak ingat, benci saja)
Vasilii Suricov
toh itu di masa lalu ...
Vasilii Suricov