web-dev-qa-db-ja.com

Vimで不正なインラインJavaScriptインデントを修正するにはどうすればよいですか?

VimでインラインJavaScriptインデントを適切にインデントできないようです。以下を検討してください。

  $(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は、2番目のケースで示されている閉じ中かっこを自動的にインデントすることを主張しているようです。ファイル全体を再度インデントすると、同じように動作します。最初のケースで見られたより標準的なJSインデントスタイルを使用して自動的にインデントするにはどうすればよいですか?

63
Charles Roper

使用 JavaScriptインデント:JavaScriptインデンター(HTMLインデントが含まれます) プレストンコプリビカ oligofren からのヘッズアップをありがとう-彼に賛成票を入れてください。

82
Charles Roper

最も包括的でバグのないJavascriptインデントスクリプトは Preston Koprivicaによるもの です。 提案された回答にあるいわゆるOOPスクリプトには重大なバグがあり、角かっこを含むコードを適切にインデントしません。

85
oligofren

上記のスクリプトは、jQueryでよく使用されるクロージャー構文を正しくフォーマットしません。

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

このスクリプトは私にとってはうまく機能します: http://www.vim.org/scripts/script.php?script_id=2765

17

これらの回答のほとんどは2009年のものであり、率直に言って、古くなっています。

vim-javascriptPrestonのスクリプトよりもはるかに新しく、最新です。

Vundle の使用をまだ開始していない場合、インストールは少し複雑になりますが、代替の問題に悩まされているようには見えません。

10
Cory Klein

おそらく、これらの設定のいくつかの組み合わせがVIMRCファイルにあるはずです。

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
7
m42

私も同じ問題を抱えていました。これは、すべてのJavascriptインデントスクリプトの中で最も優れています。

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

IndentAnythingプラグインが必要です

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

追加のボーナスとして、Javascriptブロックをかなりきれいにするこのインデントスクリプトを書きました。デフォルトではデフォルトのhtmlインデンターを使用します(Javascriptブロック内ではIndentAnythingを使用)

http://Gist.github.com/371902

3
mikelikespie

誰かがここに来る場合は、vim-javascript by pangloss at https://github.com/pangloss/vim-javascript これまでのところ、Vim 7.4で役に立ちました。そして、oligofrenとCharles Roperによる上記のソリューションはそうしませんでした。

2
Artyom

構文ファイルがJavaスクリプトのインデントが適切であると仮定して、ブロックを視覚的に強調表示して=を押します。これはJavaで機能するため、何か半分を実行すると予想されますJavaスクリプトの場合はまともです。結果はおそらくtabstop、expandtab、そして場合によってはシフト幅の設定にも依存します。

gqも便利です。インデントするのではなく、行をフォーマットします。

0
Peter

JavaScript専用のプラグインをインストールする必要はありません。インデント用の組み込みのVimオプションを学ぶことができます。 Vimにはかなりの数のオプションがあり、cindentsmartindentindentexprのようなインデントスタイルには独自のオプションがあります。

cindentまたはsmartindentまたはindentexprを使用しているかどうかを確認するには、次のコマンドを実行します。

:set cindent?
:set smartindent?
:set indentexpr?

名前にもかかわらず、cindentはCプログラムに適用されるだけでなく、Javascriptを含むほぼ同じ構文を共有する多くのプログラミング言語に適用できます。見て - :help C-indenting これに関するドキュメント。特にこのような行で設定を調整できます。 :help 'cinoptions' および :help cinoptions-values 。次に設定例を示します。

:au FileType js,javascript setlocal shiftwidth=2 softtabstop=2 cinoptions=j1,J1,(1s " see help cino-j cino-J cino-(
0
Flimm