2012-03-15 19 views
2

私はスマートインデントと自動インデントをオンにしていますが、少なくともJavaScriptでは中括弧で変な動作をしています。私が入力した場合: Vim自動インデント中括弧が間違っています

if(x==y){ 

はその後、私はこれを取得:

if(x==y){ 
    } 

そして、私は、なぜ分かりません。私は常に正常になるために1回バックスペースを取らなければならない:

if(x == y){ 
    //yay! 
} 

構文。上記のコメントの最初の/にカーソルを置いて、ifブロックの中にカーソルを置くことも可能でしょうか?

ここに私の現在の.vimrcファイルがあります。

"Color syntaxing of course 
syntax on 

"colorscheme molokai 

:colors molokai 

"Lots of undo history... just in case 
set history=700 

"Set to auto read when a file is changed from the outside 
set autoread 

"highlight the current line 
set cul 

"set color of the highlighted line 
hi CursorLine term=none cterm=none ctermbg=234 

"auto indent 
set autoindent 
set smartindent 

"Soft tabs FTW 
set expandtab 
set smarttab           

"Size of the (soft) tabs 
set shiftwidth=2          
set softtabstop=2 

"Show line numbers 
set number 

"Set line number colors to something other than that god awful orange 
hi LineNr ctermfg=234 ctermbg=black 


"Change the color of the matching brackets 
highlight MatchParen cterm=bold ctermfg=black ctermbg=DarkYellow 

"Keep at least 5 lines of space above and below and then left and right 
set scrolloff=5 
set sidescrolloff=5 

hi StatusLine cterm=NONE ctermbg=darkgreen ctermfg=white 

"Scrolling with your mouse! 
set ttymouse=xterm2 
set mouse=a 

let g:molokai_original = 1 

" Find file in current directory and edit it. 
function! Find(name) 
    let l:list=system("find . -name '".a:name."' | perl -ne 'print \"$.\\t$_\"'") 
    let l:num=strlen(substitute(l:list, "[^\n]", "", "g")) 
    if l:num < 1 
    echo "'".a:name."' not found" 
    return 
    endif 
    if l:num != 1 
    echo l:list 
    let l:input=input("Which ? (CR=nothing)\n") 
    if strlen(l:input)==0 
     return 
    endif 
    if strlen(substitute(l:input, "[0-9]", "", "g"))>0 
     echo "Not a number" 
     return 
    endif 
    if l:input<1 || l:input>l:num 
     echo "Out of range" 
     return 
    endif 
    let l:line=matchstr("\n".l:list, "\n".l:input."\t[^\n]*") 
    else 
    let l:line=l:list 
    endif 
    let l:line=substitute(l:line, "^[^\t]*\t./", "", "") 
    execute ":e ".l:line 
endfunction 
command! -nargs=1 Find :call Find("<args>") 
+0

あなたはどの言語を使用していますか?コード例は十分に小さいので、多くのことになる可能性があります。 – Emily

+0

ありがとう、固定。私はタグを追加し、最初にテキストを追加しました。私はほとんどいつもJavaScriptを使います。 –

答えて

0

私はVimがデフォルトでこれを行うことはできないと思います。十分な回避策については、my answer to this similar questionを参照してください。マッピングが即座にあなたのキー入力を再生するマクロのようなものです

EDIT

  1. 出発点はモードを挿入し、|

    if(x == y){|} 
    
  2. <CR>

    カーソルです
    if(x == y){ 
    |} 
    
  3. <CR>

    if(x == y){ 
    
    |} 
    
  4. <C-o>k<Esc>kもよい)

    if(x == y){ 
    | 
    } 
    
  5. <Tab>

    if(x == y){ 
        | 
    } 
    

実際には非常にダムで、CtrlキーとReturnキーがある場所であればどこでも動作します。

ENDEDIT

+0

私はそれを追加しましたが、違いは見えませんか?私は完全にvimには新しくないが、vimの魔法使いでもない。私は何か間違っているのですか?これは自動的には機能しませんか? –

+0

いいえ、 '{}'の間に 'Ctrl' +' Return'を押すだけで、あなたが望む結果を得ることができます。 – romainl

+0

うーん、何か違ったことをしているようではありませんか?私は 'inoremap k 'を追加して、vimを終了してもう一度起動しました。それから 'if(x == y){' if(x == y){} 'とタイプし、' {} 'の中で(Macでは)' ctrl + return'を押した。私も '' enter ''を引き起こす 'ctrl + fn + return'を試みました。あなたの投稿にコメントした他の人が同じ問題を抱えていたことに気付きました。それは完全に解決されましたか? –

0

私はJavaScriptをプログラミングするとき、私には非常に満足のいく結果が得られたvimのjavascriptのインデントプラグインJavaScript Indentを、使用することをお勧めします。

関連する問題