Cara menyisipkan karakter tab saat opsi ekspansi tab aktif di Vim

352

Ketika saya dalam mode penyisipan dan saya memiliki expandtabopsi diaktifkan, menekan Tab ↹hasil dalam memasukkan jumlah ruang yang dikonfigurasi.

Tetapi kadang-kadang saya ingin memasukkan karakter tab yang sebenarnya.

Apakah Anda tahu bagaimana melakukan ini?

devemouse
sumber

Jawaban:

516

Anda dapat menggunakan <CTRL-V><Tab>"mode insert". Dalam mode sisipkan, sisipkan <CTRL-V>salinan literal dari karakter Anda selanjutnya.

Jika Anda perlu sering melakukan ini, @ Dee`Kej menyarankan (di komentar) pengaturan Shift+ Tabuntuk memasukkan tab asli dengan pemetaan ini:

:inoremap <S-Tab> <C-V><Tab>

Juga, seperti dicatat oleh @feedbackloop, pada Windows Anda mungkin perlu menekan <CTRL-Q>daripada <CTRL-V>.

Michael Anderson
sumber
33
Dan kemudian gunakan .untuk mengulangi perintah terakhir jika Anda ingin menyisipkan banyak tab.
Xavier T.
10
Saya mempunyai beberapa masalah dalam menggunakan kombinasi ini karena saya dalam mode Perintah. Pastikan Anda menjalankan perintah ini dalam mode EDIT.
mgfernan
11
Mode INSERT, secara teknis.
mkmurray
2
Catatan: Jika Anda menggunakan gVim di Windows, Anda mungkin perlu menggunakan CTRL+ Qsebagai gantinya - lihat stackoverflow.com/questions/6951672/…
feedbackloop
8
Saya baru saja saya jalan pintas sederhana untuk kasus ini dan tampaknya berfungsi (tidak melanggar apa pun): inoremap <S-Tab> <C-V><Tab>- Anda dapat memasukkannya ke dalam ~/.vimrcfile Anda .
Dee'Kej
34

Anda dapat menonaktifkan opsi expandtab dari dalam Vim seperti di bawah ini:

:set expandtab!

atau

:set noet

PS: Dan atur kembali ketika Anda selesai dengan memasukkan tab, dengan "set expandtab" atau "set et"

PS: Jika Anda memiliki set tab yang setara dengan 4 spasi di .vimrc (softtabstop), Anda mungkin juga ingin mengaturnya menjadi 8 spasi agar dapat memasukkan tab dengan menekan tombol tab sekali alih-alih dua kali (set softtabstop = 8 ).

Jahanzeb Farooq
sumber
Singkatnya: set etdan set noetuntuk beralih tabdan spacesesuai kebutuhan.
Eric Wang
Ctrl + V menyebabkan paste terjadi dan saya tidak punya waktu untuk menyesuaikan keybindings. Ini membantu
Shirish Hirekodi
2

Dari dokumentasi di expandtab:

Untuk memasukkan tab asli saat expandtabaktif, gunakan . Lihat juga dan ins-expandtab . Opsi ini disetel ulang ketika opsi disetel dan dikembalikan saat opsi diatur ulang.CTRL-V<Tab>:retab
pastepaste

Jadi jika Anda memiliki pemetaan untuk mengganti pasteopsi, mis

set pastetoggle=<F2>

Anda juga bisa melakukannya <F2>Tab<F2>.

Eugene Yarmash
sumber