Memahami interaksi antara opsi visual, autoindent, dan paste

Nov 11 2020

Mari kita mulai dari file sumber C ++ yang salah ini

#include <vector>
int main() {
    std::vector<std::vector<int>> v{
            1,2},
            9,3},
            4,2}
    };
}

yang merupakan keadaan transit yang sah jika Anda baru saja menyalin 6 angka tersebut dari file teks yang dipisahkan spasi dengan dua kolom.

Langkah terakhir adalah menambahkan kurung kurawal pada tiga baris, jadi Anda bisa meletakkan kursor di 1, lalu pergi Ctrl-v2jI{Escape. Melakukannya, bagaimanapun, Anda berakhir dengan ini,

#include <vector>
int main() {
    std::vector<std::vector<int>> v{
        {1,2}
            1,1}
            1,2}
    };
}

karena indentasi otomatis menarik garis di mana kursor awalnya berada ke kiri (untuk alasan apa pun akan dijelaskan dalam pertanyaan sebelumnya ), yaitu teks dihapus, sehingga keluar dari mode visual blok .

Namun, jika urutan kunci tersebut digunakan setelahnya :set paste, maka pengeditannya sesuai keinginan.

Saya ingin tahu bagaimana hal-hal ini bermain bersama.

Jawaban

Enlico Nov 11 2020 at 00:03

Sepertinya alasan mengapa :set pastemenyelesaikan masalah adalah karena, antara lain, menonaktifkan cindent, dan cindentmenggunakan cinkeysnilai default, yang memicu pengindentasian ulang jika satu jenis {(atau karakter lain) di awal baris.