Indentasi ke level indentasi berikutnya dengan >>

9

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 thatakan 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
Dumitru
sumber
Jika Anda juga memiliki filetype plugin indent ondi Anda .vimrc, filetype (dan Plugin) aturan terkait lekukan-akan berlaku. Yaitu memeriksa apa tabstopnilai 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
VanLaser
3
>>dan <<masing - masing menambah dan menghapus indentasi yang bukan yang Anda inginkan. Yang Anda inginkan adalah "pemformatan", yang dilakukan dengan ==.
romainl
juga dapat memetakan :nnoremap >> ^i<tab><esc>jika Anda benar-benar menginginkan perilaku tab aktif>>
Wolfie
@romainl ==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 .
Dumitru
2
Tidak, ==gunakan salah satu equalexpratau equalprguntuk memformat ulang baris yang diberikan.
romainl

Jawaban:

12

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 Anda vimrc:

set shiftround
pengguna9433424
sumber
2

Jika Anda selalu ingin >>membuat indent ke tabstop berikutnya dan <<menghapus ke tabstop terakhir, Anda dapat mengubahnya kembali seperti ini:

:nnoremap << ^i<BS><esc>
:nnoremap >> ^i<tab><esc>

Ini akan menggerakkan kursor, tetapi Anda mungkin bisa melakukan beberapa penipuan tanda untuk memindahkannya kembali. ^tidak meninggalkan m'bekas, tetapi Anda dapat meninggalkannya secara manual di dalam penjilidan.

Wolfie
sumber