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
>>
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 satu equalexpr
atau equalprg
untuk memformat ulang baris yang diberikan.
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