Hapus spasi putih untuk sekumpulan baris dalam editor Vim

12

Saya memiliki beberapa teks seperti berikut ini di file:

  sample text
    some random text
            even more random text
text with no indent
 worst indention

Saya perlu menghapus ruang kosong sebelum masing-masing baris. Untuk satu baris yang saya lakukan adalah 0dw

Saya dapat mengulangi perintah yang sama menggunakan. tetapi dengan menavigasi secara manual ke baris berikutnya.

Tetapi apakah ada cara untuk menerapkan '0dw' pada blok-blok garis itu?

Saya kira ada cara menggunakan makro, tapi saya belum pernah menggunakannya sebelumnya. Tetapi saya bersedia mempelajarinya jika tidak ada pilihan lain.

saiy2k
sumber
+1 pertanyaan yang bagus, saya akhirnya melakukan banyak hal yang sama. Dan selamat datang di situs ini.
Sardathrion - terhadap penyalahgunaan SE

Jawaban:

10
:%s/^\s\+
" Same thing (:le = :left = left-align given range):
:%le

Pelajari lebih lanjut di sini di http://vim.wikia.com/wiki/Remove_unwanted_spaces

Jika Anda ingin melakukan ini untuk rentang garis tertentu:

:19,25s/^\s\+//

BTW, cara terbaik untuk mulai belajar vim adalah dengan mengeksekusi vimtutorperintah, itu akan mengajarkan Anda cara menggunakan Vim di Vim editor.

Nikhil Mulley
sumber
1
: le mengagumkan dan terima kasih banyak untuk alternatif dan tautannya :)
saiy2k
3
+1 untuk vimtutor dan jawaban yang bagus.
Sardathrion - terhadap penyalahgunaan SE
1
Pilih garis yang relevan dengan menggunakan Vdan menggerakkan kursor untuk memperluas pemilihan garis. Kemudian tekan :untuk masuk secara otomatis '<,'>, dan dari sana Anda dapat menggunakan regexp Nikhil.
UncleZeiv
1
Cara lain untuk melakukan berbagai garis (karena saya selalu lupa nomor baris) adalah menandai 2 garis dan beroperasi pada tanda. Contoh, pergi ke baris 19 dan tekan 'ma', pergi ke baris 25 dan tekan 'mb', lalu lakukan :'a,'bs/^\s\+//.
Patrick
7

Cara alternatif untuk melakukan ini adalah dengan menggunakan alat indentasi VIM (biasanya terikat ke </ >). Pertama, Anda perlu beberapa cara untuk menunjukkan baris mana yang akan terpengaruh. Anda dapat menggunakan mode pemilihan visual atau cara lain untuk menentukan rentang garis yang akan terpengaruh, kemudian menggunakan angka tinggi atau tingkat indentasi untuk menghapus. 9<biasanya melakukan trik dengan cukup baik untuk menghapus setidaknya 9 level indentasi (tab / spasi) yang mungkin dari baris saat ini.

Caleb
sumber
3

Saya punya pendekatan untuk melakukan ini dalam langkah-langkah sederhana berikut:

1. press `v` to go to visual selection mode
2. select the lines you want to affect
3. :'<,'>normal 0dw

Penjelasan langkah ketiga:

0 menavigasi ke mulai dari garis.

dw menghapus kata (spasi kosong).

normalmenerapkan perintah 0dw.

'<,'> mengulangi yang normal untuk semua baris yang dipilih dalam mode visual.

saiy2k
sumber
1

ctrl+vmemungkinkan Anda untuk melakukan sesuatu yang mirip dengan apa yang Anda inginkan tetapi tidak tepat. Anda dapat memilih blok visual dan menerapkan satu perintah ke lot.

Sardathrion - menentang penyalahgunaan SE
sumber
2
saya memilih garis-garis itu dalam mode blok dan perintah ini berhasil:: '<,'> normal 0dw
saiy2k
1
@aiy2k :normaladalah hal yang penting di sini, dan saya pikir itu adalah jawaban terbaik di sini. Bisakah Anda mempostingnya sebagai jawaban?
Gilles 'SANGAT berhenti menjadi jahat'