2009-03-06 45 views
62

Tôi dường như không thể lấy được Javascript nội dòng thụt lề đúng cách trong Vim. Hãy xem xét những điều sau đây:Làm cách nào để sửa lỗi thụt dòng Javascript nội dòng không chính xác trong Vim?

$(document).ready(function() { 

    // Closing brace correctly indented 
    $("input").focus(function() { 
     $(this).closest("li").addClass("cur-focus"); 
    }); // <-- I had to manually unindent this 

    // Closing brace incorrectly indented 
    $("input").blur(function() { 
     $(this).closest("li").removeClass("cur-focus"); 
     }); // <-- This is what it does by default. Argh! 

    }); 

Vim dường như tự động nhấn mạnh đóng ngoặc được hiển thị trong trường hợp thứ hai tại đó. Nó làm như vậy nếu tôi thụt lại toàn bộ tập tin. Làm cách nào để lấy nó tự động thụt lề bằng cách sử dụng phong cách thụt lề JS tiêu chuẩn hơn trong trường hợp đầu tiên?

Trả lời

80

Sử dụng JavaScript Indent: Javascript indenter (HTML indent is included) bởi Preston Koprivica. Cảm ơn những người đứng đầu từ oligofren - cho anh ta một cuộc bỏ phiếu.

+0

Tôi vừa gợi ý nhận xét của bạn rằng có thể tệp cú pháp vim :) – m42

+0

Tôi đã tự hỏi tại sao javascript indentation là tất cả các wonky, cảm ơn rất nhiều! – FurtiveFelon

+0

Tôi jave indendation-vấn đề với sự cung cấp OOP javascript indentation, đặc biệt với jQuery-code. Xem câu trả lời của oligofren cho một plugin thụt lề làm việc. – Markus

5

có thể một số kết hợp các cài đặt này phải nằm trong tệp VIMRC của bạn.

syntax on 
set syn=auto 
set showmatch 
filetype on 
filetype plugin on 
filetype indent on 
set tabstop=4 
set softtabstop=4 
set shiftwidth=4 
set expandtab 
+0

Rất cám ơn các đề xuất, nhưng tôi đã có hầu hết các bộ này và dường như chúng không hữu ích. –

+0

Tôi nhận thấy với vim đôi khi phù hợp với niềng răng thay đổi một tab dừng lại cho đến khi tôi bỏ qua dòng đó trong mã. Tôi nghĩ * rằng "plugin filetype trên & filetype indent trên" được cho là để lái xe đó. bạn có tệp cú pháp cho javascript không? (Tôi không làm việc với JS, do đó, không biết nếu nó cần thiết hay không – m42

+0

Nếu không có một số cài đặt này, tập lệnh Koprivica sẽ không hoạt động. –

0

Giả sử tệp cú pháp có thụt lề tốt cho tập lệnh java, đánh dấu trực quan khối và nhấn =. Điều này làm việc cho java vì vậy tôi sẽ mong đợi nó để làm một cái gì đó một nửa phong nha cho java script. Kết quả có thể cũng phụ thuộc vào các thiết lập của tabstop, expandtab và có thể là shiftwidth.

gq cũng hữu ích, nó định dạng các dòng thay vì thụt lề chúng.

+0

Cảm ơn vì điều đó. Kết hợp tôi thường sử dụng để thụt lề toàn bộ tệp là gg = G. Vấn đề của tôi là khi tôi làm điều này, JS đã không thụt lề một cách chính xác. Câu trả lời của tôi ở trên đã giải quyết được vấn đề. –

3

Tôi gặp vấn đề tương tự. Đây là sản phẩm tốt nhất của tất cả các kịch bản thụt đầu dòng javascript:

http://www.vim.org/scripts/script.php?script_id=1840

Nó đòi hỏi các plugin IndentAnything

http://www.vim.org/scripts/script.php?script_id=1839

Là một tiền thưởng thêm, tôi đã viết kịch bản thụt lề này sẽ làm cho khối Javascript khá đẹp . Nó sử dụng indenter html mặc định theo mặc định (và IndentAnything một khi trong một khối Javascript)

http://gist.github.com/371902

+0

trông giống như điều này hầu hết mọi thứ "sai", giống như thêm hai mức thụt sau (function() {. Cũng mất điểm cực đối với việc không có github/bibucket repo –

+0

Đồng ý trong khi nó tốt hơn so với hầu hết các câu trả lời upvoted vẫn không tốt – Drachenfels

84

Các thụt đầu dòng kịch bản toàn diện và lỗi-miễn phí hầu hết Javascript là the one by Preston Koprivica. Tập lệnh OOP được gọi là trong câu trả lời được đề xuất có lỗi nghiêm trọng và không thụt lề mã đúng cách có dấu ngoặc vuông.

+3

Đây là người duy nhất thực sự làm việc cho các tệp js của tôi (bao gồm chủ yếu mã jQuery - nhiều dấu ngoặc và dấu ngoặc nhọn trên cùng một dòng) – Markus

+1

Lưu ý, tôi đã cập nhật câu trả lời được chấp nhận một thời gian trước đây để liên kết với kịch bản của Preston Koprivica –

+1

Lưu ý: Một cái gì đó trong cấu hình vim của tôi làm cho phiên bản '1.0' của kịch bản Preston không thụt lề đúng trên các dòng mới, tuy nhiên, phiên bản' b3.0' chỉ hoạt động tốt. '1.0', hãy thử' b3.0' để thay thế. –

17

Các kịch bản nêu trên không định dạng đóng-cú pháp thường được sử dụng trong jQuery một cách chính xác:

$(function() { 
    // only one level of indentation, not two 
}); 

kịch bản này hoạt động tốt hơn cho tôi: http://www.vim.org/scripts/script.php?script_id=2765

+5

Cám ơn vì cái này! Là một lưu ý phụ, hãy chắc chắn lấy phiên bản từ github, đó là nhiều, mới hơn nhiều. – DMan

+2

Điều này hoạt động tốt hơn nhiều so với bình chọn cao hơn cho tôi. Cảm ơn. –

+0

Rất tiếc, tập lệnh thụt lề này không thành công trên các trường hợp đơn giản như đặt dấu ngoặc mở của một khối trên dòng mới và không tôn trọng cài đặt mở rộng tab của người dùng, ví dụ: thụt lề với 3 dấu cách khi tôi định cấu hình để mở rộng thành 4. – aphax

10

Hầu hết các câu trả lời là từ năm 2009 và, thẳng thắn, đã lỗi thời.

vim-javascript là gần đây nhiều hơn và to-date lên hơn Preston's script.

cài đặt là một chút phức tạp hơn nếu bạn chưa bắt đầu sử dụng Vundle nêu ra, nhưng nó dường như không bị ảnh hưởng từ các vấn đề của lựa chọn thay thế.

+0

Lưu ý rằng 'vim-javascript' không hỗ trợ javascript nhúng trong các tệp html (theo như tôi có thể biết). –

+0

Đây là plugin javascript tốt nhất mà tôi đã gặp. Vẫn còn tốt trong năm 2017 –

1

Trong trường hợp ai đó đến đây, xin lưu ý rằng vim-javascript bởi pangloss tại https://github.com/pangloss/vim-javascript đã giúp tôi cho đến nay, tức là Vim 7.4. Và các giải pháp trên từ oligofren và Charles Roper thì không.

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