Thụt vào mức thụt đầu dòng tiếp theo với >>


9

Thỉnh thoảng tôi phải làm việc với mã không được thụt vào mức thụt mà tôi đã cài đặt Vim (4 khoảng trống cho mỗi cấp), thường là sau khi sao chép / dán thứ gì đó trong tệp. Tôi thường làm với <<>>. Vấn đề là họ không nhảy lên cấp độ thụt tiếp theo, họ chỉ thêm hoặc bớt 4 khoảng trắng.

Nếu tôi có mã như thế này

if condition:
    do this
   do that

làm >>trên do thatsẽ dẫn đến

if condition:
    do this
       do that

Tôi muốn nó đi đến đây

if condition:
    do this
    do that

Bên cạnh dễ dàng khớp với vết lõm của dòng trên, tôi muốn nó chuyển sang cấp độ thụt tiếp theo, không thêm 4 khoảng trắng.

Đây là những gì tôi có trong .vimrc của mình về việc thụt lề

:set tabstop=4 shiftwidth=4 expandtab

Nếu bạn cũng có filetype plugin indent onở bạn .vimrc, filetype (và plugin) quy tắc thụt đầu dòng liên quan đến sẽ áp dụng. Tức là kiểm tra tabstopgiá trị thực sự của bạn là gì ( set tabstop?sẽ làm như vậy đối với các cài đặt khác), khi chỉnh sửa và thay đổi các giá trị đó bằng cách thêm dòng của bạn vào tệp 'sau', đại loại như: stackoverflow.com/a/159066/5000478
VanLaser

3
>><<tương ứng thêm và loại bỏ thụt lề không phải là những gì bạn muốn. Những gì bạn muốn là "định dạng", được thực hiện với ==.
romainl

cũng có thể lập bản đồ :nnoremap >> ^i<tab><esc>nếu bạn thực sự muốn hành vi trên tab>>
Wolfie

@romainl ==sẽ nhảy đến cấp độ của dòng trên. Mặc dù một điều tốt để biết, nó sẽ không hoạt động trong tất cả các trường hợp mà tôi quan tâm. Ngoài ra, tôi muốn làm gì >><<thụt vào / chuyển sang nhiều băng thông tiếp theo từ đường biên theo hướng đó .
Dumitru

2
Không, ==sử dụng equalexprhoặc equalprgđể định dạng lại các dòng đã cho.
romainl

Câu trả lời:


12

Khi bạn sử dụng một trong các lệnh {count}>>, {count}<<, >{motion}hoặc <{motion}, trên một số dòng đã được thụt vào, và bạn muốn mức thụt đầu dòng mới của họ là một bội số của bạn 'shiftwidth'giá trị tùy chọn, bạn có thể kích hoạt 'shiftround'tùy chọn, và thêm dòng này trong thư mục vimrc:

set shiftround

2

Nếu bạn luôn muốn >>thụt vào tabstop tiếp theo và <<xóa đến tabstop cuối cùng, bạn có thể rebind chúng như vậy:

:nnoremap << ^i<BS><esc>
:nnoremap >> ^i<tab><esc>

Điều này sẽ di chuyển con trỏ, nhưng bạn có thể thực hiện một số thủ thuật đánh dấu để di chuyển nó trở lại. ^không để lại m'dấu, nhưng bạn có thể để lại một cách thủ công bên trong ràng buộc.

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.