Bagaimana saya membuat vi - Vim tidak pernah menggunakan tab (mengubah spasi menjadi tab, buruk!), Membuat kunci tab == 4 spasi, dan secara otomatis memasukkan kode setelah blok penjepit keriting seperti yang dilakukan Emacs ?
Juga, bagaimana saya menyimpan pengaturan ini sehingga saya tidak perlu memasukkannya lagi?
Saya telah melihat pertanyaan lain yang terkait dengan ini, tetapi sepertinya selalu sedikit dari apa yang saya inginkan.
vim
whitespace
indentation
vi
auto-indent
mmcdole
sumber
sumber
Jawaban:
Seperti yang telah ditunjukkan dalam beberapa jawaban di bawah ini, metode yang lebih disukai sekarang adalah BUKAN menggunakan smartindent, tetapi gunakan yang berikut (di .vimrc Anda ):
Di file .vimrc: Anda :File bantuan memerlukan sedikit waktu untuk membiasakan diri, tetapi semakin banyak Anda membaca, semakin baik Vim:
Bahkan lebih baik, Anda dapat menyematkan pengaturan ini di sumber Anda untuk portabilitas:
Untuk melihat pengaturan Anda saat ini:
Seperti yang ditunjukkan oleh graywhent dalam komentar, smartindent telah digantikan oleh cindent yang "Bekerja lebih pintar", meskipun masih terutama untuk bahasa dengan sintaks mirip C:
sumber
Terkait, jika Anda membuka file yang menggunakan tab dan spasi, anggap Anda punya
Anda dapat mengganti semua tab dengan spasi di seluruh file dengan
sumber
Cara terbaik untuk mendapatkan indentasi filetype-spesifik adalah dengan menggunakan
filetype plugin indent on
di vimrc Anda. Kemudian Anda dapat menentukan hal-hal sepertiset sw=4 sts=4 et
di .vim / ftplugin / c.vim, misalnya, tanpa harus membuat global untuk semua file yang sedang diedit dan sintaks tipe non-C lainnya akan mendapatkan indentasi yang benar juga (bahkan lisps) .sumber
Untuk memiliki 4 ruang tab di sebagian besar file, tab char 8-real sebenarnya di Makefiles, dan indentasi otomatis dalam berbagai file termasuk C / C ++, letakkan ini di
~/.vimrc
file Anda :sumber
else
? Sepertinya saya seperti baris terakhir menimpa makefile-spesifik dalam semua kasusPada banyak sistem Linux, seperti Ubuntu,
.vimrc
file tidak ada secara default, jadi Anda disarankan untuk membuatnya terlebih dahulu.Jangan gunakan
.viminfo
file yang ada di direktori home. Ini digunakan untuk tujuan yang berbeda.Langkah 1: Buka direktori home Anda
cd ~
Langkah 2: Buat file
vim .vimrc
Langkah 3: Tambahkan konfigurasi yang disebutkan di atas
Langkah 3: Simpan file, dengan menekan Shift+ ZZ.
sumber
Shift + ZZ
itu akan membuat file .swp. gunakanwq
.Ctrl-Z
ada cerita lain ...)vim -n <file>
. File swap bukan sesuatu yang dihasilkan saat menghemat waktu; itu akan sangat mengecewakan tujuannya, karena swap file menjadi berguna dalam memulihkan sesi edit yang tiba-tiba dihentikan.Cara yang disarankan adalah menggunakan indentasi berbasis filetype dan hanya menggunakan smartindent dan cindent jika itu tidak cukup.
Tambahkan berikut ini ke .vimrc Anda
Semoga ini membantu sebagai jawaban yang berbeda.
sumber
edit ~ / .vimrc Anda
tambahkan baris berikut:
sumber
Dari wiki VIM :
sumber
Indentasi otomatis didasarkan pada mode sintaksis saat ini. Saya tahu bahwa jika Anda mengedit Foo.java, maka masukkan a
{
dan tekanEnter indentasi baris berikut.Adapun tab, ada dua pengaturan. Di dalam Vim, ketik titik dua dan kemudian "set tabstop = 4" yang akan mengatur tab untuk ditampilkan sebagai empat spasi. Tekan titik dua lagi dan ketik "set expandtab" yang akan menyisipkan spasi untuk tab.
Anda dapat menempatkan pengaturan ini dalam .vimrc (atau _vimrc pada Windows) di direktori home Anda, jadi Anda hanya perlu mengetiknya sekali.
sumber
Pertama, jangan gunakan Tabkunci di Vim untuk indentasi manual. Vim memiliki sepasang perintah dalam mode sisipkan untuk secara manual menambah atau mengurangi jumlah indentasi. Perintah-perintah itu adalah Ctrl-Tdan Ctrl-D. Perintah-perintah ini mengamati nilai-nilai
tabstop
,shiftwidth
danexpandtab
, dan mempertahankan campuran spasi dan tab yang benar (jumlah tab maksimum diikuti oleh jumlah spasi yang diperlukan).Kedua, kunci indentasi manual ini tidak harus digunakan terlalu banyak jika Anda menggunakan lekukan otomatis.
Jika Ctrl-Talih-alih Tabmengganggu Anda, Anda dapat memetakannya kembali:
Anda juga dapat memetakan Shift-Tabuntuk melakukan Ctrl-Ddeindent:
Di sini ^ T dan ^ D adalah karakter kontrol literal yang dapat dimasukkan sebagai Ctrl-VCtrl-T.
Dengan pemetaan ini, Anda masih bisa mengetik Tab literal ke dalam buffer menggunakan Ctrl-VTab. Perhatikan bahwa jika Anda melakukan ini, bahkan jika
:set expandtab
dalam keadaan aktif, Anda mendapatkan karakter tab yang tidak dikembangkan.Efek serupa dengan
<Tab>
peta dicapai dengan menggunakan:set smarttab
, yang juga menyebabkan backspace di depan garis berperilaku pintar.Dalam
smarttab
mode, ketika Tabdigunakan bukan pada awal baris, itu tidak memiliki arti khusus. Itu berbeda dari pemetaan di atas saya Tabuntuk Ctrl-T, karenaCtrl-T di mana saja digunakan dalam garis (dalam mode insert) akan meningkatkan lekukan garis ini.Pemetaan berguna lainnya mungkin:
Sekarang kita dapat melakukan hal-hal seperti memilih beberapa baris, dan tekan Tabuntuk membuat indentasi berakhir. Atau pukulTab dua kali pada baris (dalam mode perintah) untuk meningkatkan lekukannya.
Jika Anda menggunakan perintah manajemen lekukan yang tepat, maka semuanya dikendalikan oleh tiga parameter:
shiftwidth
,tabstop
danexpandtab
.The
shiftwidth
parameter mengontrol ukuran lekukan Anda; jika Anda ingin empat inden spasi, gunakan:set shiftwidth=4
, atau singkatan:set sw=4
.Jika ini dilakukan, maka lekukan akan dibuat menggunakan campuran spasi dan tab, karena
noexpandtab
ini adalah default. Gunakan:set expandtab
. Ini menyebabkan karakter tab yang Anda ketikkan ke buffer untuk memperluas ke spasi, dan untuk lekukan yang dikelola Vim hanya menggunakan spasi.Kapan
expandtab
aktif, dan jika Anda mengelola lekukan Anda melalui semua mekanisme Vim yang tepat, nilaitabstop
menjadi tidak relevan. Ini mengontrol bagaimana tab muncul jika mereka terjadi pada file. Jika Anda telahset tabstop=8 expandtab
dan kemudian menyelipkan tab keras ke dalam file menggunakan Ctrl-VTab, itu akan menghasilkan keselarasan ke posisi tab berbasis 8 kolom berikutnya, seperti biasa.sumber
<C-t>
dapat menggunakan sintaks itu daripada literal. Terakhir, pemetaan<Tab>
dalam mode normal juga akan memetakan<C-i>
(mereka adalah karakter yang sama), jadi saya tidak merekomendasikan itu (Anda kehilangan fungsionalitas vim yang bagus