Dari waktu ke waktu saya harus bekerja dengan kode yang tidak menjorok ke tingkat indentasi yang saya set up Vim (4 spasi per level), biasanya setelah menyalin / menempelkan sesuatu di file. Saya biasanya puas dengan <<
dan >>
. Masalahnya adalah mereka tidak melompat ke level indentasi berikutnya, mereka hanya menambah atau mengurangi 4 spasi.
Jika saya punya kode seperti ini
if condition:
do this
do that
melakukan >>
pada do that
akan menghasilkan
if condition:
do this
do that
Saya ingin membahas ini
if condition:
do this
do that
Selain dengan mudah mencocokkan lekukan dari baris di atas, saya ingin lompatan ke tingkat lekukan berikutnya, bukan menambahkan 4 spasi.
Ini yang saya miliki di .vimrc saya tentang indentasi
:set tabstop=4 shiftwidth=4 expandtab
indentation
Dumitru
sumber
sumber
filetype plugin indent on
di Anda.vimrc
, filetype (dan Plugin) aturan terkait lekukan-akan berlaku. Yaitu memeriksa apatabstop
nilai Anda sebenarnya (set tabstop?
akan melakukan; sama untuk pengaturan lain), saat mengedit, dan mengubah nilai-nilai itu dengan menambahkan baris Anda ke file 'setelah', sesuatu seperti: stackoverflow.com/a/159066/5000478>>
dan<<
masing - masing menambah dan menghapus indentasi yang bukan yang Anda inginkan. Yang Anda inginkan adalah "pemformatan", yang dilakukan dengan==
.:nnoremap >> ^i<tab><esc>
jika Anda benar-benar menginginkan perilaku tab aktif>>
==
akan melompat ke level garis di atas. Meskipun hal yang baik untuk diketahui, itu tidak akan berfungsi dalam semua kasus saya tertarik. Sebagai tambahan untuk pertanyaan, apa yang saya inginkan adalah untuk>>
dan<<
indentasi / dedent ke beberapa shiftwidth berikutnya dari perbatasan ke arah itu .==
gunakan salah satuequalexpr
atauequalprg
untuk memformat ulang baris yang diberikan.Jawaban:
Bila Anda menggunakan salah satu dari perintah
{count}>>
,{count}<<
,>{motion}
atau<{motion}
, pada beberapa garis yang telah menjorok, dan Anda ingin tingkat lekukan baru mereka untuk menjadi kelipatan dari Anda'shiftwidth'
nilai pilihan, Anda dapat mengaktifkan'shiftround'
pilihan, dan tambahkan baris ini di Andavimrc
:sumber
Jika Anda selalu ingin
>>
membuat indent ke tabstop berikutnya dan<<
menghapus ke tabstop terakhir, Anda dapat mengubahnya kembali seperti ini:Ini akan menggerakkan kursor, tetapi Anda mungkin bisa melakukan beberapa penipuan tanda untuk memindahkannya kembali.
^
tidak meninggalkanm'
bekas, tetapi Anda dapat meninggalkannya secara manual di dalam penjilidan.sumber