Trong Vim, lệnh sửa lỗi thụt dòng của tất cả các dòng là gì?
Thường thì tôi sẽ sao chép và dán mã vào một thiết bị đầu cuối từ xa và làm cho toàn bộ sự việc bị rối tung. Tôi muốn khắc phục điều này trong một cú trượt ngã.
Trong Vim, lệnh sửa lỗi thụt dòng của tất cả các dòng là gì?
Thường thì tôi sẽ sao chép và dán mã vào một thiết bị đầu cuối từ xa và làm cho toàn bộ sự việc bị rối tung. Tôi muốn khắc phục điều này trong một cú trượt ngã.
Câu trả lời:
=
, lệnh thụt lề có thể có chuyển động. Vì vậy, gg
để bắt đầu tập tin, =
thụt lề, G
đến cuối tập tin , gg=G
.
''
(hai trích dẫn đơn) đưa bạn trở lại nơi bạn đã ở nên gg=G''
nên thụt lề sau đó quay trở lại.
Trước khi dán vào thiết bị đầu cuối, hãy thử :set paste
và sau đó :set nopaste
sau khi bạn hoàn thành. Điều này sẽ tắt tính năng tự động thụt lề, ngắt dòng và các tính năng khác đang làm rối quá trình dán của bạn.
chỉnh sửa: Ngoài ra, tôi nên chỉ ra rằng một kết quả tốt hơn nhiều so với =
thụt lề thường có thể thu được bằng cách sử dụng một chương trình bên ngoài. Ví dụ, tôi chạy :%!perltidy
mọi lúc. astyle
, cindent
vv cũng có thể được sử dụng. Và, tất nhiên, bạn có thể ánh xạ các phím đó thành một nét chính và ánh xạ các phím khác nhau vào cùng một tổ hợp phím tùy thuộc vào loại tệp.
equalprg
tùy chọn trong ftplugin để sử dụng bộ lọc ngoài để =
thụt lề, thay vì gắn phím tùy chỉnh.
formatpgm
với gọn gàng và astyle và sau đó gq
. Dưới đây là một số ví dụ từ tôi .vimrc
: au FileType xml set fp=tidy\ -q\ -i\ -xml
vàau FileType java set fp=/usr/local/bin/astyle\ --mode=java\ --indent=tab
Nếu bạn muốn giới thiệu lại khối bạn đang ở mà không cần phải gõ bất kỳ hợp âm nào, bạn có thể làm:
[[=]]
=aB
mà sẽ không di chuyển con trỏ cả.
[[=]]
yêu cầu 5 hợp âm :(
Bậc thầy của tất cả các lệnh là
gg=G
Điều này thụt lề toàn bộ tập tin!
Và dưới đây là một số lệnh đơn giản và thanh lịch được sử dụng để thụt dòng nhanh chóng trong Vim hoặc gVim.
Để thụt lề tất cả các dòng bên dưới dòng hiện tại
=G
Để thụt dòng hiện tại
==
Để thụt n
dòng dưới dòng hiện tại
n==
Ví dụ: để thụt 4 dòng bên dưới dòng hiện tại
4==
Để thụt lề một khối mã, đi đến một trong các dấu ngoặc nhọn và sử dụng lệnh
=%
Bạn có thể sử dụng ứng dụng / tiện ích gọn gàng để thụt lề các tệp HTML & XML và nó hoạt động khá tốt trong việc thụt các tệp đó.
Yêu cầu một tệp XML
:!tidy -mi -xml %
Yêu cầu một tệp HTML
:!tidy -mi -html %
nhấn thoát và sau đó gõ nhanh kết hợp bên dưới:
gg=G
1G=G
. Điều đó sẽ thụt lề tất cả các dòng trong tập tin. 1G
đưa bạn dòng đầu tiên, =
sẽ bắt đầu tự động thụt lề và cuối cùng G
sẽ đưa bạn dòng cuối cùng trong tệp.
1gg=G
Trong Vim, sử dụng :insert
. Điều này sẽ giữ tất cả các định dạng của bạn và không làm tự động. Để biết thêm thông tin help :insert
.
vim-autoformat định dạng các tệp nguồn của bạn bằng các chương trình bên ngoài dành riêng cho ngôn ngữ của bạn, ví dụ: đá quý "rbeautify" cho các tệp Ruby, gói npm "js-beautify" cho JavaScript.
Đối với các tệp C ++ phức tạp, vim không phải lúc nào cũng có định dạng đúng khi sử dụng =
lệnh bộ lọc của vim . Vì vậy, đối với một tình huống như vậy, tốt hơn là sử dụng một trình định dạng C ++ bên ngoài như astyle (hoặc không tin cậy ), vd:
:%!astyle
Hàm '=' của Vim sử dụng trình định dạng bên trong của nó theo mặc định (điều này không phải lúc nào cũng đúng) nhưng người ta cũng có thể đặt nó sử dụng một trình định dạng bên ngoài, như astyle, bằng cách thiết lập nó một cách thích hợp như được thảo luận trong câu hỏi này .
Đối với các tệp XML, tôi sử dụng lệnh này
:1,$!xmllint --format --recover - 2>/dev/null
Bạn cần cài đặt xmllint (gói libxml2-utils)
(Nguồn: http://ku1ik.com/2011/09/08/formatted-xml-in-vim-with-indent-command.html )
Bạn có thể tạo một bản đồ để làm điều này cho bạn.
Cái này sẽ tự động thụt vào toàn bộ tệp và vẫn giữ con trỏ của bạn ở vị trí bạn đang ở:
nmap <leader>ai mzgg=G`z
Đối với vi Editor, sử dụng: chèn. Điều này sẽ giữ tất cả định dạng của bạn và không chèn tự động thụt lề. Sau khi thực hiện nhấn thoát để xem tệp được định dạng thực tế nếu không bạn sẽ thấy một số ký tự rác. như ^ tôi ví dụ:
public static void main(String[] args) {
^I
^I System.out.println("Some Garbage printed upon using :insert");
}
Chỉ cần chuyển đến chế độ trực quan trong vim và chọn từ lên xuống dòng sau khi chọn chỉ cần nhấn =, Tất cả các dòng được chọn sẽ được thụt lề.
ggvG=
khi bạn có thể gg=G
. Điểm quan trọng trong việc làm cho chuyển động có thể nhìn thấy là gì? Điều đó đi cho tất cả các hành động mà có chuyển động.