vim: xóa 2 khoảng trắng đầu tiên cho nhiều dòng


79

Cách dễ nhất để xóa 2 khoảng trắng đầu tiên cho mỗi dòng bằng VIM là gì? Về cơ bản, nó lặp lại "2x" cho mỗi dòng.

Làm rõ: ở đây giả định là 2 ký tự đầu tiên là khoảng trắng. Vì vậy, câu hỏi là về việc thực hiện thụt lề cho nhiều dòng với nhau.


Đó là khoảng trắng cụ thể hay hai ký tự đầu tiên bất kể chúng là gì?
Jason Down

Đó là hai ký tự đầu tiên. Giả sử hai ký tự đầu tiên là khoảng trắng.
twimo

Tôi đã chỉ ra một cách để làm điều đó thông qua tìm kiếm và thay thế trong chế độ trình chỉnh sửa cũ. Một cách đảm bảo rằng nó sẽ chỉ thực hiện đối với các dòng bắt đầu bằng hai dấu cách (và chỉ xóa hai dấu cách). Người còn lại chỉ đặt ruột hai ký tự đầu tiên bất kể chúng là gì.
Jason Down

Câu hỏi Vim không lạc đề trên SO (kiểm tra các cuộc thảo luận về meta, và ... SO FAQ). Thụt đầu dòng Hơn nữa có liên quan đến phát triển ...
Luc Hermitte

Câu trả lời:


93

Một số tùy chọn khác. Bạn có thể quyết định đâu là "cách dễ nhất".

Xóa 2 ký tự đầu tiên của mỗi dòng:

:%normal 2x

Loại bỏ 2 ký tự đầu tiên của mỗi dòng, chỉ khi chúng là khoảng trắng:

:%s/^  /

Lưu ý rằng dấu gạch chéo cuối cùng là tùy chọn và chỉ ở đây để bạn có thể nhìn thấy hai khoảng trắng. Không có dấu gạch chéo, nó chỉ có 7 ký tự, bao gồm cả :.

Di chuyển thụt lề sang trái cho mọi dòng:

:%normal <<

11
Tôi thích rằng có 30 cách khác nhau để làm điều gì đó trong Vim. Những câu hỏi như thế này gợi lên những điều bạn chưa từng biết. Tôi không biết về% bình thường.
Jason Down

Cảm ơn bạn đã làm rõ trên dấu gạch ngang cuối cùng. Đó là hữu ích.
ryanjdillon

1
Tôi sẽ nói thêm rằng %dấu chỉ có nghĩa là "thực hiện lệnh này cho mỗi dòng trong tài liệu, không chỉ cho dòng hiện tại". Tôi nghĩ. Không thể tìm thấy nhiều tài liệu về nó.
Sammaron

119
  1. Vào chế độ khối trực quan với Ctrl-V(hoặc Ctrl-Qnếu bạn sử dụng Ctrl-Vđể dán);
  2. Chọn khu vực để xóa bằng các mũi tên;
  3. Sau đó nhấn dđể xóa vùng đã chọn.
  4. nhấn Esc

7
ctrl-v để chọn các ký tự cần xóa và sau đó d để cắt.
Henrik K

2
Câu trả lời có gắn dấu sao hàng đầu! :-)
Nikos Alexandris

Điều này không hoạt động trong tất cả các vim mà tôi sử dụng, nhưng đối với những vim hoạt động, nó rất thuận tiện và thật tuyệt khi có thể hình dung khu vực bạn đang xóa trước khi thực sự làm điều đó.
searchhengine27

Có lẽ ràng buộc mặc định khác nhau cho chế độ khối trực quan? Có thể có sự khác biệt giữa phân phối unix cũ hơn VI (trái ngược với VIM).
Tom Kerr

Đây có lẽ là câu trả lời dễ nhất và hợp lý nhất.
Willem van Ketwich

13

Bạn cũng có thể sử dụng tìm kiếm và thay thế (trong trình chỉnh sửa cũ, được truy cập thông qua :ký tự):

Xóa hai ký tự đầu tiên bất kể điều gì:

%s/^.\{2}//

Xóa hai ký tự khoảng trắng đầu tiên (phải ở đầu và cả hai phải là khoảng trắng ... bất kỳ dòng nào không phù hợp với tiêu chí đó sẽ bị bỏ qua):

%s/^\s\{2}//

2
Dấu / g ở cuối là thừa. Bạn chỉ thực hiện một trận đấu mỗi dòng.
bhinesley

imo đây là một giải pháp tuyệt vời
Victoria Stuart


4

Hai dấu cách, hay hai ký tự? ( 2xsau này không.)

:[range]s/^  //

xóa hai ô trống ở đầu mỗi dòng; sử dụng %(tương đương với 1,$) như [range]làm đối với điều này cho toàn bộ tệp.

:[range]s/^..//

xóa hai ký tự đầu tiên của mỗi dòng, bất kể chúng là gì. (Lưu ý rằng nó xóa hai ký tự , không nhất thiết phải là hai cột ; một ký tự tab được tính là một ký tự).

Nếu những gì bạn thực sự đang làm là thay đổi thụt lề, bạn có thể sử dụng <lệnh để giảm nó hoặc >lệnh để tăng nó. Đặt shiftwidthđể kiểm soát mức độ dịch chuyển của nó, ví dụ:

:set shiftwidth=2

3

Tôi sẽ thử một trong hai cách tiếp cận:

  1. Thực hiện chỉnh sửa cột trên khối để xóa bằng cách sử dụng Ctrl+V(thường được ánh xạ tới Ctrl+Q).
  2. Ghi lại macro trên hàng đầu tiên bằng cách sử dụng q1(hoặc bất kỳ số / chữ cái nào khác mà bạn muốn biểu thị thanh ghi ghi), sau đó phát lại macro đó nhiều lần bằng cách sử dụng @1(để sử dụng ví dụ trước của tôi. Tốt hơn nữa, hãy sử dụng một số đứng trước để cho biết nó có bao nhiêu số lần chạy - 10@1ví dụ: để chạy macro đó 10 lần. Tuy nhiên, nó phụ thuộc vào những gì bạn đã ghi lại - hãy đảm bảo tua lại con trỏ 0hoặc thả một dòng j, nếu điều đó có liên quan.

3

Tôi cũng muốn nói thêm: tìm hiểu cách định cấu hình thụt lề cho vim. Sau đó, một đơn giản gg=Gsẽ làm thủ thuật.

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.