Bagaimana cara memperbaiki lekukan seluruh file di Vi?


625

Dalam Vim, apa perintah untuk memperbaiki indentasi semua baris?

Sering kali saya akan menyalin dan menempelkan kode ke terminal jarak jauh dan semuanya kacau. Saya ingin memperbaiki ini dalam satu gerakan.



8
Mencegah lebih baik daripada mengobati. Dalam semangat itu muncul komentar ini. Lakukan ": atur tempel" sebelum memasuki mode sisipkan dan tempel kode dari terminal jarak jauh.
Proyek Chthonic

Jawaban:


1215

=, perintah indent dapat mengambil gerakan. Jadi, gguntuk memulai file, =indentasi, Ghingga akhir file gg=G,.


39
Saya tidak akan pernah bisa melepaskan 1G saya yang berharga =) Salah satu favorit saya adalah =% berdiri di atas braket pembuka. Ini memperbaiki indentasi seluruh blok.
PEZ

2
: 0 <kembali> tidak terlalu buruk tapi gg bagus. (Ya, saya belajar dulu)
Erik Olson

8
Bisakah saya membuat indentasi seluruh file tanpa meninggalkan baris saat ini?
Fábio Perez

86
@ Fábio: ''(dua tanda kutip tunggal) membawa Anda kembali ke tempat Anda gg=G''semestinya jadi harus indentasi kemudian kembali.
Nemo157

@ArchimedesTrajano vim saham Mac OS sudah sangat tua, saya sarankan versi HomeBrew; ini jauh lebih baru. Saya memiliki beberapa masalah yang mengganggu dengan vim Mac. Juga, saya mendengar bahwa Anda tidak boleh main-main dengan yang ada di dalamnya, jadi jangan coba memperbaruinya sendiri kecuali Anda sangat berhati-hati.
AlexMA

126

Sebelum menempel ke terminal, coba :set pastedan :set nopastesetelah selesai. Ini akan mematikan indentasi otomatis, pembungkus baris, dan fitur lain yang mengacaukan tempel Anda.

sunting: Juga, saya harus menunjukkan bahwa hasil yang jauh lebih baik daripada =indentasi biasanya dapat diperoleh dengan menggunakan program eksternal. Sebagai contoh, saya menjalankan :%!perltidysemua waktu. astyle,, cindentdll. juga dapat digunakan. Dan, tentu saja, Anda dapat memetakannya ke stroke kunci, dan memetakan yang berbeda keystroke yang sama tergantung pada jenis file.


5
Anda dapat mengatur equalprgopsi di ftplugin untuk menggunakan filter eksternal untuk =indentasi, daripada pengikatan tombol khusus.
Josh Lee

Juga ada opsi pengikat tombol pastetoggle misalnya. : set pt \ p untuk beralih di antara mode
michael

Catatan: dalam konfigurasi grml's, tombol pastetoggle dipetakan ke F11
Thomas

Saya gunakan formatpgmdengan rapi dan astyle dan kemudian gq. Berikut adalah beberapa contoh dari saya .vimrc: au FileType xml set fp=tidy\ -q\ -i\ -xmldanau FileType java set fp=/usr/local/bin/astyle\ --mode=java\ --indent=tab
Raffi Khatchadourian

baru saja mengunduh perltidy setelah membaca ini, ini jauh lebih baik daripada indentasi otomatis vim default
Joey Ciechanowicz

29

Jika Anda ingin mengaktifkan kembali blok tempat Anda berada tanpa harus mengetik akord apa pun, Anda dapat melakukannya:

[[=]]

1
Maaf untuk menghidupkan kembali ini, tetapi apa yang Anda maksud dengan akord? Coords?
John P

7
"Akor" di sini mengacu pada perintah yang dikeluarkan dengan menekan satu tombol sambil menekan yang lain, dalam analogi dengan akord musik ada beberapa nada yang berbunyi sekaligus. Jadi G adalah shift + g, ^] adalah ctrl +], dan seterusnya. Ini membutuhkan waktu lebih lama untuk diketik daripada binding satu tombol.
Ralph Giles

Anda juga dapat menggunakan =aBkursor yang tidak akan bergerak sama sekali.
Amin

7
Pada keyboard Nordik, [[=]]dibutuhkan 5 akor :(
k4kuz0

29

Tuan dari semua perintah adalah

gg=G

Ini indentasi seluruh file!

Dan di bawah ini adalah beberapa perintah sederhana dan elegan yang digunakan untuk membuat garis cepat di Vim atau gVim.

Untuk membuat indentasi semua baris di bawah baris saat ini

=G

Untuk indentasi baris saat ini

==

Untuk membuat ngaris di bawah garis saat ini

n==

Misalnya, untuk membuat indentasi 4 baris di bawah baris saat ini

4==

Untuk membuat indentasi blok kode, buka salah satu kawat gigi dan gunakan perintah

=%

17

Anda dapat menggunakan aplikasi / utilitas yang rapi untuk membuat indentasi file HTML & XML dan ini berfungsi cukup baik dalam indentasi file tersebut.

Prettify file XML

:!tidy -mi -xml %

Prettify file HTML

:!tidy -mi -html %

16

tekan escape dan kemudian ketikkan kombinasi di bawah ini dengan cepat:

gg=G

28
Saya mengetik dengan lambat, Anda tidak akan percaya apa yang terjadi selanjutnya.
k0pernikus

Saya baru saja memberikan jawaban dan komentar yang mendukung karena itu sangat berharga! lol @ k0pernikus
gglasses

12

1G=G. Itu harus membuat indentasi semua baris dalam file. 1Gmembawakan Anda baris pertama, =akan memulai indentasi otomatis dan final Gakan membawa Anda baris terakhir dalam file.


Atau bahkan1gg=G
Biggybi

1G = G memperbaikinya untuk saya. Luar biasa!
Natus Drew

8

:set pasteadalah teman Anda, saya menggunakan dempul dan akhirnya menyalin kode antar windows. Sebelum saya dihidupkan :set paste(dan :set nopaste) copy / paste memberi saya cocok karena alasan itu.


1
Ya, saya juga menggunakan dempul. : set paste is awesome
mmcdole

7

Di Vim, gunakan :insert. Ini akan menjaga semua format Anda dan tidak melakukan indentifikasi otomatis. Untuk informasi lebih lanjut help :insert.


7

jika Anda tidak ingin menggunakan :set paste, klik tengah set nopaste,, Anda juga dapat menempelkan isi clipboard:

"*p
"+p

Dengan begitu Anda tidak harus meninggalkan mode normal. jika Anda harus menempelkan +atau *bergantung pada cara Anda memilih teks, lihat :help quoteplus.



3

Untuk file C ++ yang kompleks, vim tidak selalu mendapatkan pemformatan yang benar saat menggunakan =perintah filter vim . Jadi untuk situasi seperti itu, lebih baik menggunakan formatter C ++ eksternal seperti astyle (atau tidak bisa dipercaya ) misalnya:

:%!astyle

Fungsi Vim '=' menggunakan formatter internal secara default (yang tidak selalu membuat segalanya menjadi benar) tetapi kita juga dapat mengaturnya menggunakan formatter eksternal, seperti astyle, dengan mengaturnya dengan tepat seperti yang dibahas dalam pertanyaan ini .



1

Anda dapat membuat pemetaan untuk melakukan ini untuk Anda.

Yang ini akan membuat indentasi keseluruhan file dan tetap menjaga kursor Anda di posisi Anda:

nmap <leader>ai mzgg=G`z

0

Untuk vi Editor, gunakan: masukkan. Ini akan menjaga semua pemformatan Anda dan tidak memasukkan indentasi otomatis. Setelah selesai tekan escape untuk melihat file yang diformat yang sebenarnya jika tidak, Anda akan melihat beberapa karakter sampah. seperti ^ I eg:

public static void main(String[] args) {
^I
^I System.out.println("Some Garbage printed upon using :insert"); 
}

0

Masuk saja ke mode visual dalam vim, dan pilih dari atas ke bawah setelah memilih cukup tekan =, Semua baris yang dipilih akan indentasi.


Saya akan menghindari ini. Mode visual adalah ketika Anda tidak yakin tentang gerakan Anda, jika Anda tahu cara menangkap sekumpulan karakter maka tidak ada gunanya langkah tambahan untuk masuk ke mode visual. Kenapa ggvG=kalau bisa gg=G. Apa gunanya membuat gerakan itu terlihat? Itu berlaku untuk semua tindakan yang mengambil gerakan.
alextes
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.