Làm cách nào để chuyển dòng thụt lề thành một giá trị cụ thể?


11

Nhiều lần tôi chạy qua một tình huống mà một dòng không được thụt lề đúng cách. Ether thông qua một dán, plugin thụt lề xấu / không ưa thích hoặc thường là không gian bổ sung bù đắp giá trị thụt lề. Tôi thường sửa nó bằng <<hoặc >>một vài lần để sửa nó. Trong trường hợp có thêm không gian, tôi sẽ thực hiện 100<<sau đó >>cho mỗi cấp độ thụt lề mà tôi thực sự muốn.

Câu hỏi là, giống như |chuyển động cho phép bạn đặt cột theo số 10|sẽ gửi con trỏ đến cột thứ 10. Làm thế nào tôi có thể chỉ định mức độ thụt lề?

Một ví dụ (điều này không hoạt động) với shiftwidth=4 expandtab:

The quick (indent level 0)
••••Brown Fox (indent level 1)
••••••••••Jumped over the lazy dog (indent level 2 with two extra spaces)

Trong trường hợp này, tôi hiện phải đếm mức thụt dòng của dòng cuối cùng (2) và thêm một mức cho các khoảng trắng thừa sau đó nhập 3<<rồi đếm mức thụt lề của những gì tôi sau đó 1>>(hoặc sử dụng autoindent==lệnh).

Tôi đang yêu cầu một cái gì đó giống như 1==buộc thụt lề phải ở mức 1. Hoặc trong một số trường hợp 0==để loại bỏ một vết lõm cùng nhau.

Tôi nhận ra ví dụ trên không tự động thụt vào 1 hoặc 0 dòng (tương ứng) và do đó không làm những gì tôi muốn nhưng hy vọng nó sẽ giúp minh họa câu hỏi tốt hơn.

Câu trả lời:


18

Bạn có thể sử dụng :leftlệnh:

:[range]le[ft] [indent]
Đường thẳng bên trái trong [range]. Đặt thụt lề trong các dòng thành [indent](mặc định 0). {không ở Vi}

Lưu ý rằng :leftđặt thụt lề thành n khoảng trắng và không biết shiftwidthhoặc tabstop, vì vậy sử dụng :left 8sẽ sử dụng 8 khoảng trắng.

Nếu bạn muốn đặt mức thụt lề, bạn có thể dễ dàng xác định lệnh:

command! -nargs=1 Left execute 'left ' . &sw * <args>

Sử dụng :Left 2sẽ đặt thụt đầu dòng thành 8 khoảng trắng.

Để ánh xạ tới <Leader>=, bạn có thể sử dụng:

noremap <expr> <Leader>= ':left ' . str2nr(nr2char(getchar())) * &sw . '<CR>'

Tôi không chắc đây có phải là cách tốt nhất không, nhưng đó là cách duy nhất tôi có thể quản lý ... \=2sẽ thụt dòng hiện tại thành 8 khoảng trắng và 5\=3sẽ thụt 5 dòng tiếp theo thành 12 khoảng trắng.


Một gợi ý liên quan cũng giải quyết vấn đề của bạn là thiết lập shiftroundtùy chọn. Từ:help 'shiftround'

Vòng thụt vào nhiều 'shiftwidth'. Áp dụng cho >< các lệnh. CTRL-T và CTRL-D trong chế độ Chèn luôn làm tròn thụt lề thành bội số 'shiftwidth'(đây là tương thích Vi).

Trong ví dụ của bạn, cái đầu tiên <<sẽ "làm tròn" thành 8 khoảng trắng. Vì vậy, vấn đề của bạn (sử dụng 3<<và sau đó >>) được giải quyết. Và như trang trợ giúp nói, bạn cũng có thể sử dụng <C-d>từ chế độ chèn.


Tuyệt vời! Những giải pháp này hoạt động hoàn hảo.
Sukima
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.