2011-09-07 29 views
6

Tôi đang sử dụng Vim để chỉnh sửa mã Erlang. Tôi đã quen với (hầu hết các lập trình viên Erlang làm điều này) để thụt đang Erlang bởi phạm vi khung họ đang ở trong Ví dụ, C thường được thụt vào một tab chiều rộng bên trong dấu ngoặc nhọn:.Mã thụt đầu dòng theo chỉ mục cột khung trong Vim?

int main(void) { 
    printf("hello, world\n"); 
    return 0; 
} 

Trong Erlang, đó là phổ biến để thụt lề dựa trên cột nơi khung bắt đầu:

?assertError({bad_options, [{foo, bar}, 
          bad_option]}, 
      lhttpc:request("http://localhost/", get, [], <<>>, 1000, 
          [bad_option, {foo, bar}])). 

(Ví dụ ở trên được thụt lề để lấy điểm, không theo vẻ đẹp chủ quan).

Tab chiều rộng sẽ được sử dụng nếu khối được bắt đầu trên một dòng mới:

?assertError(
    {bad_options, [{foo, bar}, bad_option]}, 
    lhttpc:request(
     "http://localhost/", get, [], <<>>, 1000, 
     [bad_option, {foo, bar}] 
    ) 
). 

phần có liên quan của vimrc của tôi:

set expandtab " Spaces for tabs " 
set tabstop=4 " Tab width 4 " 
set shiftwidth=4 
set smarttab 
set autoindent 

" Enable filetype plugin " 
filetype plugin on 
filetype indent on 

Có cách nào để thực hiện thụt đầu dòng này trong Vim , và nếu có, làm thế nào?

+0

Bạn đã thử https://github.com/jimenezrick/vimerl chưa? – W55tKQbuRu28Q4xv

+0

Tôi nhận ra rằng tôi đang sử dụng 'vimerl' và cập nhật lên phiên bản mới nhất. Nhưng không, nó vẫn thụt vào 1 (hoặc 2 đôi khi, đủ lạ) độ rộng của tab. –

Trả lời

4

Có một ngã ba của vimerl mà thực hiện "bối cảnh ý thức thụt đầu dòng" thay vì "thụt đầu dòng tĩnh": https://github.com/aszlig/vimerl.git

vẻ để làm việc, vì vậy tôi sẽ lăn với điều đó trong một thời gian.

+0

Xin chào, @Adam Lindberg. Đã một tuần rồi. Bạn cảm thấy thế nào về vimerl? Tôi có chính xác các yêu cầu tương tự như bạn. Cảm ơn! – JasonSmith

+0

Cái nĩa đó dường như thụt vào theo nhu cầu của tôi. –

1

Có vẻ như bạn cần phải nghiên cứu kỹ về thế giới âm u của cindentcinoptions. Tôi tin rằng việc đưa những điều sau đây vào vimrc của bạn sẽ đáp ứng một phần nhu cầu của bạn:

set cindent 
set cinoptions+=(0 

Nhưng câu hỏi đặt ra là điều này sẽ ảnh hưởng đến hành vi khác như thế nào. Xem help cinoptions-values để biết thêm thông tin. Nó có thể đạt được chính xác những gì bạn muốn, nhưng nó có thể mất một số thử nghiệm.

Hy vọng điều này sẽ hữu ích.

+0

Có vẻ hơi hứa hẹn, nhưng tôi không thể tìm ra các tùy chọn để sử dụng. Đã thử rất nhiều thứ nhưng không nhận được bất cứ thứ gì từ xa có thể sử dụng được. Nghi ngờ rằng có lẽ các plugin Erlang messes điều lên cũng vì nó có indentation riêng của nó. –

+0

Bạn đã thử sử dụng 'set cinoptions?' Để tìm giá trị được đặt bởi các thay đổi Erlang (không có bất kỳ thay đổi nào của bạn)? Plugin có yêu cầu cải thiện thụt đầu dòng không? Nếu vậy, có thể khó điều chỉnh nó từ bên ngoài plugin. –

+0

Mặc định 'cinoptions' có vẻ trống. Plugin dường như làm một số công việc [indenting] (https://github.com/jimenezrick/vimerl/blob/master/indent/erlang.vim) có thể gây khó khăn cho việc sửa chữa. –

Các vấn đề liên quan