Xóa khoảng trắng cho một tập hợp các dòng trong trình soạn thảo Vim


12

Tôi có một số văn bản như sau trong một tập tin:

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

Tôi cần xóa khoảng trống trước mỗi dòng. Đối với một dòng những gì tôi làm là 0dw

Tôi có thể lặp lại cùng một lệnh bằng cách sử dụng. nhưng bằng cách điều hướng bằng tay đến các dòng tiếp theo.

Nhưng có cách nào để áp dụng '0dw' cho các dòng đó không?

Tôi cho rằng có một cách sử dụng macro, nhưng tôi chưa từng sử dụng chúng trước đây. Nhưng tôi sẵn sàng học chúng nếu không có lựa chọn nào khác.


+1 câu hỏi hay, cuối cùng tôi cũng làm rất nhiều điều tương tự. Và chào mừng đến với trang web.
Sardathrion - chống lại lạm dụng SE

Câu trả lời:


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

Tìm hiểu thêm tại đây tại http://vim.wikia.com/wiki/Remove_unwocate_spaces

Nếu bạn muốn làm điều này cho một phạm vi cụ thể của dòng:

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

BTW, cách tốt nhất để bắt đầu học vim là thực thi vimtutorlệnh, nó sẽ dạy bạn cách sử dụng Vim trong trình soạn thảo Vim.


1
: le thật tuyệt vời và cảm ơn rất nhiều về các lựa chọn thay thế và liên kết :)
saiy2k

3
+1 cho vimtutor đề cập cũng như một câu trả lời tốt.
Sardathrion - chống lại lạm dụng SE

1
Chọn các dòng có liên quan bằng cách sử dụng Vvà di chuyển con trỏ xung quanh để mở rộng lựa chọn dòng. Sau đó nhấn :để tự động nhập '<,'>và từ đó bạn có thể sử dụng biểu thức chính quy của Nikhil.
ChúZeiv

1
một cách khác để thực hiện một loạt các dòng (vì tôi luôn quên số dòng) là đánh dấu 2 dòng và hoạt động trên các nhãn hiệu. Ví dụ: đi đến dòng 19 và nhấn 'ma', đến dòng 25 và nhấn 'mb', sau đó làm :'a,'bs/^\s\+//.
Patrick

7

Một cách khác để làm điều này là sử dụng các công cụ thụt đầu dòng của VIM (thường được ràng buộc với </ >). Trước tiên, bạn cần một số cách để chỉ ra dòng nào sẽ bị ảnh hưởng. Bạn có thể sử dụng chế độ lựa chọn trực quan hoặc bất kỳ phương tiện nào khác để chỉ định một phạm vi các dòng bị ảnh hưởng, sau đó sử dụng một mức độ cao hoặc mức thụt đầu dòng tùy ý để loại bỏ. 9<thường thực hiện thủ thuật khá độc đáo để loại bỏ ít nhất 9 cấp độ thụt lề có thể (tab / dấu cách) khỏi (các) dòng hiện tại.


3

Tôi có cách tiếp cận để làm điều này trong các bước đơn giản sau:

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

Giải thích về bước thứ ba:

0 điều hướng để bắt đầu dòng.

dw xóa từ (khoảng trống).

normaláp dụng lệnh 0dw.

'<,'> lặp lại bình thường cho tất cả các dòng được chọn trong chế độ trực quan.


1

ctrl+vcho phép bạn làm một cái gì đó tương tự như những gì bạn muốn nhưng không chính xác. Bạn có thể chọn một khối trực quan và áp dụng một lệnh cho lô.


2
tôi đã chọn các dòng đó trong chế độ khối và lệnh này đã hoạt động :: '<,'> bình thường 0dw
saiy2k

1
@ saiy2k :normallà điều quan trọng ở đây và tôi nghĩ đó là câu trả lời tốt nhất ở đây. Bạn có thể gửi nó như là một câu trả lời?
Gilles 'SO- ngừng trở nên xấu xa'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.