Tôi không chắc chắn rằng có cách nào tốt hơn. Nhưng, có một vài cách mà bạn có thể làm điều đó (mà tôi có thể nghĩ đến anyway) ...
của bạn trực quan Khối Giải pháp
Giống như bạn nói: bấm Ctl-V
chọn dòng bạn muốn , nhấn I
để chèn và nhập số lượng khoảng trắng.
Tìm kiếm
Tương tự như trên nhưng linh hoạt hơn một chút - bạn có thể sử dụng với với 'chọn đoạn' vip
lệnh, hoặc bất kỳ phạm vi thực sự: nhấn v
hoặc vip
hoặc những gì đã bạn chọn phạm vi và loại :s/^/{n spaces}
trong đó {n dấu cách} là số khoảng trống bạn muốn chèn.
Đó là một chi tiết hơn một chút, nhưng hoạt động khá tốt cho khá nhiều bất kỳ phạm vi nào. Heck, nếu bạn muốn làm toàn bộ tập tin bạn có thể làm Ctl-A
hoặc những gì có bạn (phụ thuộc hệ điều hành) và thụt lề toàn bộ tệp (hoặc chỉ bỏ qua toàn bộ chế độ hình ảnh và chỉ cần thực hiện chế độ lệnh ... như trong :1,$s/^/{n spaces}
Lưu ý rằng bạn không cần phải bao gồm các dấu gạch chéo thứ ba trong s /// kể từ khi bạn không đặt bất kỳ thẻ ở cuối.
toàn cầu
có lẽ bạn chỉ muốn dòng thụt lề mà phù hợp với một số mẫu. Nói ... Tất cả các dòng có chứa foo. Không có vấn đề gì: loại :g/foo/s/^/{n spaces}
Toàn cầu đặc biệt hữu ích nếu các phần nhiều dòng của nó có cùng mẫu. Bạn chỉ có thể thoát khỏi vùng đất chế độ bình thường và chọn các dòng bạn muốn và thụt lề cho phù hợp: :g/foo/norm Vjj:s/^/{n spaces}Ctl-V{Enter}
. Ít phức tạp hơn với điều đó thêm Ctl-V{Enter}
ở cuối nhưng hữu ích trong những trường hợp nhất định.
Sử dụng tabstop và shiftwidth
Có, nếu bạn làm việc đó rất nhiều - Tôi muốn làm :set ts=2
và :set et
và :set sw=2
và sử dụng >>
và <<
mọi cách mà ...
Thực hiện một Chức năng
Được rồi, vì vậy vẫn không đủ ngắn gọn và vì bất kỳ lý do nào bạn cần thực hiện việc này rất nhiều và bạn không thể tuân thủ điều này với sw
, et
và ts
cài đặt. Không thành vấn đề, chỉ cần viết lên một chức năng nhanh chóng và cung cấp cho nó một ánh xạ localleader
:
function! AddSpace(num) range
let s:counter = 0
let s:spaces = ''
while s:counter < a:num
let s:spaces .= ' '
let s:counter = s:counter + 1
endwhile
execute a:firstline .','. a:lastline .'s/^/'. s:spaces
endfunction
:map <LocalLeader>i :call AddSpace(3)Ctl-V{enter}
Có lẽ chỉ biết nhiều hơn một cách để làm điều này là tốt hơn so với chỉ biết một? Sau khi tất cả, đôi khi giải pháp tốt nhất phụ thuộc vào vấn đề :)
Tại sao bạn muốn tránh thay đổi 'sw'? Đó là những gì nó có ở đó. – Daenyth
Trong lựa chọn dòng trực quan, '{count}>' sẽ thụt lề bởi '{count} * 'shiftwidth'', trong khi ở chế độ bình thường,' {count} 'được sử dụng để đếm các dòng được thụt lề. Có lẽ đây là những gì bạn muốn. Lưu ý rằng đối với lựa chọn khối hình ảnh, nhưng khoảng cách được chèn trước cột đầu tiên của khối thay vì bắt đầu của dòng. – Benoit