2008-10-14 47 views
19

Khi thụt mã java với các chú thích, vim khăng khăng thụt như thế này:Làm cách nào để tạo chú thích java thụt lề một cách chính xác?

@Test 
    public void ... 

Tôi muốn chú thích được trong cùng một cột như định nghĩa phương pháp nhưng tôi dường như không thể tìm thấy một cách để nói với vim để làm điều đó, ngoại trừ có thể sử dụng một biểu thức thụt lề nhưng tôi không chắc chắn nếu tôi có thể sử dụng điều đó cùng với cindent thường xuyên.

chỉnh sửa: Plugin kiểu tệp đã được bật Tôi chỉ hơi bối rối về các plugin thụt lề. Câu trả lời được chấp nhận có thể là một chút hackish nhưng cũng làm việc cho tôi.

Trả lời

9

Chỉnh sửa: Tôi không thể xóa câu trả lời của riêng mình vì nó đã được chấp nhận, nhưng @pydave's answer có vẻ là giải pháp tốt hơn (mạnh mẽ hơn).


Có thể bạn đang sử dụng tệp thụt đầu dòng cho tệp loại tệp java (thay vì sử dụng cindent) bằng cách đặt filetype plugin indent on.

Điều đó nói rằng, tệp thụt lề đến với Vim 7.1 từ bản phân phối Linux của tôi (xem vim svn hiện tại vẫn đúng với 7.2) không tính đến chú thích. Vì vậy, tôi sao chép /usr/share/vim/vim71/indent/java.vim (xem https://vim.svn.sourceforge.net/svnroot/vim/branches/vim7.1/runtime/indent/java.vim) để ~/.vim/indent/java.vim và thêm vào các dòng sau ngay trước khi kết thúc:

let lnum = prevnonblank(v:lnum - 1) 
let line = getline(lnum) 
if line =~ '^\s*@.*$' 
    let theIndent = indent(lnum) 
endif 

Tôi không chắc chắn nếu điều này phá vỡ bất kỳ vết lõm khác, nhưng nó làm việc cho tôi.

+0

Điều này không hiệu quả đối với tôi - tôi đã thêm nó vào cuối. Tôi đang sử dụng vim 7.2 Tôi đang làm gì sai? – Naseer

+0

: facepalm: đã hoạt động ngay bây giờ - Tôi đã thêm nó vào cuối và không ở cuối hàm: D Cảm ơn! – Naseer

+0

Điều này cũng phù hợp với tôi. – Lyle

18

Bạn không nên sửa đổi cài đặt vim được cài đặt sẵn. Thay đổi của bạn có thể biến mất sau khi nâng cấp gói. Nếu bạn sao chép nó vào .vim của bạn, sau đó bạn sẽ không nhận được bất kỳ sửa lỗi indent java.

Thay vào đó, hãy đặt những điều sau đây vào một tập tin mới được gọi là ~/.vim/after/indent/java.vim

function! GetJavaIndent_improved() 
    let theIndent = GetJavaIndent() 
    let lnum = prevnonblank(v:lnum - 1) 
    let line = getline(lnum) 
    if line =~ '^\s*@.*$' 
     let theIndent = indent(lnum) 
    endif 

    return theIndent 
endfunction 
setlocal indentexpr=GetJavaIndent_improved() 

Bằng cách đó nó tải thụt lề cổ java và chỉ đổi thụt lề để loại bỏ các indents chú thích.

+0

Điều này phù hợp với tôi. – AMing

1

tôi thấy đề nghị pydave của gần những gì tôi muốn, nhưng tôi muốn điều này:

@Override 
public void ... 

này:

@Override public void ... 

vì vậy tôi thay thế regex (theo pydave của, địa điểm trong ~/.vim/after/indent/java.vim):

setlocal indentexpr=GetJavaIndent_improved() 

function! GetJavaIndent_improved() 
    let theIndent = GetJavaIndent() 
    let lnum = prevnonblank(v:lnum - 1) 
    let line = getline(lnum) 
    if line =~ '^\s*@[^{]*$' 
     let theIndent = indent(lnum) 
    endif 

    return theIndent 
endfunction 
Các vấn đề liên quan