Tab để thụt lề, không gian để căn chỉnh


17

Tôi đang cố gắng làm cho vim tự động thụt lề bằng các tab và căn chỉnh với các khoảng trắng, nhưng thực sự, vim thụt lề với các tab và điền vào căn chỉnh bằng các tab + khoảng trắng.

Vim làm điều đó:

nhập mô tả hình ảnh ở đây

(mỗi khối là một tab)

{
>--long a = 1,
>-->--..b = 2,
>-->--..c = 3;
}

Có thể làm điều đó:

{
>--long a = 1,
>--.....b = 2,
>--.....c = 3;
}

Vì vậy, tôi nghĩ rằng có rất nhiều câu hỏi về chủ đề của các tab và khoảng trắng, nhưng không ai trong số chúng cung cấp một số giải pháp Just Works:

Thật ra tôi đang sử dụng:

set ai
set cindent
set cinoptions=(0,:0,u0,U0,g0)

Tôi đã thử plugin Smart Tab , có vẻ như hoạt động tốt, nhưng khi dùng thử, gg=Gtôi gặp một số lỗi lạ:

Error detected while processing function CtabRedoIndent..<SNR>12_CheckAlign:
line   11:
E108: No such variable: "b:ctab_lastalign"
Press ENTER or type command to continue
Error detected while processing function CtabRedoIndent:
line   10:
E170: Missing :endwhile

Cuộc thảo luận này dường như đã cũ, vậy bây giờ, 2015, có một giải pháp chính thức nào để đối phó với nó?



Tôi không có ánh xạ cho điều này, chỉ là một ý tưởng ... nhưng nếu bạn đặt Vim để chèn các tab (với bất kỳ chiều rộng nào bạn muốn) khi bạn nhấn phím tab, nhưng thực sự mở rộng một tab thành khoảng trắng nếu bạn nhập Shift -Chuyển hướng? Điều đó có làm cho việc sắp xếp này trở nên đơn giản không?
tự đại diện

(PS: Có một cuộc thảo luận thú vị về "Tab so với không gian" trong diễn đàn "Cuộc chiến tôn giáo" của truyện tranh xkcd . Thưởng thức;)
Wildcard

Câu trả lời:


3

Làm điều này thực sự tự động là khó khăn. Vim không biết "thụt" là gì và "căn chỉnh" là gì; và một số người có thể không đồng ý về những gì chính xác cấu thành thụt và căn chỉnh.

Điều đó đang được nói, plugin Smart Tab được thiết kế để làm những gì bạn muốn; Tôi thấy rằng nó hoạt động hợp lý tốt cho các tệp C, nhưng có một số cảnh báo; ví dụ, nó phá vỡ các tệp Python và đôi khi thực hiện một số điều không mong muốn (đối với tôi) đối với các tệp C.
Nhìn vào nguồn, tôi thực sự không thể tìm ra cách nó hoạt động trong 5 phút và kết hợp với thực tế là nó phá vỡ một số thứ, nên bảo bạn tiến hành cẩn thận ...


3

Trình cắm Smart Tab mà bạn đã đề cập là tốt như nó có. Ban đầu tôi gặp phải lỗi tương tự như bạn đã làm và bỏ cuộc nhưng cuối cùng đã dành vài phút để sửa nó. Hãy thử áp dụng các bản vá sau:

--- ctab.vim.orig   2016-08-11 17:05:20.767275274 +0800
+++ ctab.vim    2016-08-11 17:15:20.039286525 +0800
@@ -221,7 +221,7 @@
       if a:line == line('.')
         let b:ctab_lastalign=a:line
       else
-        unlet b:ctab_lastalign
+        unlet! b:ctab_lastalign
       endif
       set ts=50
       set sw=50

Sau đó tôi thấy rằng ai đó đã đề xuất cách khắc phục tương tự trong phần wiki Tab thông minh . Than ôi, đã không có một bản phát hành mới.


0

Việc thụt lề trong vim được thực hiện đơn giản bằng cách sử dụng tập lệnh sau

Script để thực hiện thụt lề của một tập tin

#!/bin/bash 
#Author: Ankit shah
#Enter file name to indent as argument
file=$1
vim $file -c "normal gg=G" -c "wq"
#Use expand command to turn tabs into spaces. Code uniform across different vim environment
expand -t 4 $file $file 

2
Đây không phải là một câu trả lời cho câu hỏi
Martin Tournoij
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.