Khi tôi sao chép mã từ một tệp khác, định dạng bị rối, như thế này:
fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}
Làm thế nào tôi có thể tự động định dạng mã này trong vim?
Khi tôi sao chép mã từ một tệp khác, định dạng bị rối, như thế này:
fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}
Làm thế nào tôi có thể tự động định dạng mã này trong vim?
Câu trả lời:
Hãy thử các tổ hợp phím sau:
gg=G
Giải thích: gg
đi đến đầu tệp, =
là một lệnh để sửa lỗi thụt đầu dòng và G
bảo nó thực hiện thao tác đến cuối tệp.
Tôi thích sử dụng chương trình Phong cách nghệ thuật. Theo trang web của họ :
Artistic Style là một công cụ mã hóa, định dạng và làm đẹp mã nguồn cho các ngôn ngữ lập trình C, C ++, C # và Java.
Nó chạy trong Window, Linux và Mac. Nó sẽ làm những việc như thụt lề, thay thế các tab bằng dấu cách hoặc ngược lại, đặt khoảng trắng xung quanh các thao tác bạn thích (chuyển đổi if(x<2)
thành ( x<2 )
nếu đó là cách bạn thích), đặt dấu ngoặc trên cùng một dòng như định nghĩa hàm hoặc di chuyển chúng sang dòng bên dưới, vv Tất cả các tùy chọn được điều khiển bởi các tham số dòng lệnh.
Để sử dụng nó trong vim, chỉ cần đặt tùy chọn formatprg cho nó, sau đó sử dụng lệnh gq. Vì vậy, ví dụ, tôi có trong .vimrc của mình:
autocmd BufNewFile,BufRead *.cpp set formatprg=astyle\ -T4pb
để bất cứ khi nào tôi mở tệp .cpp, formatprg được đặt với các tùy chọn tôi thích. Sau đó, tôi có thể nhập gg để đi đến đầu tệp và gqGđịnh dạng toàn bộ tệp theo tiêu chuẩn của tôi. Nếu tôi chỉ cần định dạng lại một chức năng duy nhất, tôi có thể đi đến đỉnh của chức năng, sau đó nhập gq][và nó sẽ định dạng lại chức năng đó.
Các tùy chọn tôi có cho astyle, -T4pb
chỉ là sở thích của tôi. Bạn có thể xem qua tài liệu của họ và thay đổi các tùy chọn để định dạng mã theo cách bạn muốn.
Đây là một bản demo. Trước astyle:
int main(){if(x<2){x=3;}}
float test()
{
if(x<2)
x=3;
}
Sau astyle (gggqG):
int main()
{
if (x < 2)
{
x = 3;
}
}
float test()
{
if (x < 2)
x = 3;
}
Mong rằng sẽ giúp.
Plugin vim-autoformat cho phép bạn định dạng bộ đệm (hoặc lựa chọn bộ đệm) bằng một lệnh duy nhất: https://github.com/Chiel92/vim-autoformat . Nó sử dụng các chương trình định dạng bên ngoài cho điều đó, với chức năng dự phòng cho chức năng thụt lề của vim.
Tôi thấy rằng clang-format
hoạt động tốt.
Có một số ví dụ khóa trong tài liệu clang
Tôi thích sử dụng các equalprg
ràng buộc trong vim. Điều này cho phép bạn gọi clang-format
với G=gg
hoặc các =
tùy chọn thụt lề khác .
Chỉ cần đặt phần sau vào tệp .vimrc của bạn:
autocmd FileType c,cpp setlocal equalprg=clang-format
sudo apt install clang-format
Tôi thích indent
như đã đề cập ở trên, nhưng hầu hết tôi chỉ muốn định dạng một phần nhỏ của tệp mà tôi đang làm việc. Vì indent
có thể lấy mã từ stdin, nó thực sự đơn giản:
:!indent
.astyle
mất stdin quá, vì vậy bạn có thể sử dụng thủ thuật tương tự ở đó.
Tôi muốn thêm, rằng để ngăn chặn nó bị rối ở nơi đầu tiên bạn có thể gõ :set paste
trước khi dán. Sau khi dán, bạn có thể gõ :set nopaste
cho những thứ như js-beautifying và thụt lề để làm việc lại.
:set paste!
cho cái này, nó thay đổi giá trị dán thay vì đặt nó. Điều này làm cho nó dễ dàng hơn để tắt vì bạn chỉ cần cuộn lại một vài lệnh và nhấn enter.