2013-04-13 16 views
6

私は最近、私の大学院レベルのプロジェクトにvimを使用し始めました。主な問題は、私は時々私はインデントされていないコードをチェックインに直面している。私は何とかオートインデント+セーブ+ショートカットを作成できれば、私の問題を解決できるはずです。保存前にvimに自動インデントを指示する方法

マイファイル.vimrc:

set expandtab 
set tabstop=2 
set shiftwidth=2 
set softtabstop=2 
set pastetoggle=<F2> 
syntax on 
filetype indent plugin on 

このようなコマンドのショートカットを作成するには、&の上に乗りでどのような方法があります:xは(+終了を保存)。

お知らせください。

+3

代わりのトリガ、 '設定autoindent'を使用し、最初の場所に適切にあなたのコードをインデント! –

答えて

5

私は最初の場所でこの問題を回避するために、autoindentをオンにすることをお勧めします。 開発のあらゆる段階で適切にインデントされたコードで作業する方が簡単です。

set autoindent 

:help autoindentでドキュメントを読んでください。

ただし、=コマンドは、ファイルタイプの規則に従って行をインデントします。 BufWritePre autocmdを作成すると、ファイル全体のインデントを実行できます。

私はこれをテストしていませんでしたし、それが実際に動作する方法をよく知っていない:

autocmd BufWritePre * :normal gg=G 

読む:help autocmdトピックの詳細については。 gg=gブレークダウンとおり

  • :normalノーマルモード編集コマンドではなく:exコマンド
  • グラムグラム
  • =インデントまで、ファイルの先頭に移動として実行.. 。
  • G ...ファイルの終わり。

私は本当にかかわらず、この戦略をお勧めしません。代わりにset autoindentの使用に慣れてください。このファイルをすべてのファイル(*のように)に定義することはおそらく賢明ではありません。それだけで特定のファイルタイプに行うことができる:

" Only for c++ files, for example 
autocmd BufWritePre *.cpp :normal gg=G 
+2

スクリプトで 'normal'を使わないで' gg = G'はここで書いたように分解する必要はありません。 – ZyX

+0

このコマンドは、挿入するたびにファイルを保存する傾向がないかぎり、カーソルをggに戻して使用できなくなるので便利です。 –

14

は、あなたの.vimrcに以下を追加します。

" Restore cursor position, window position, and last search after running a 
" command. 
function! Preserve(command) 
    " Save the last search. 
    let search = @/ 

    " Save the current cursor position. 
    let cursor_position = getpos('.') 

    " Save the current window position. 
    normal! H 
    let window_position = getpos('.') 
    call setpos('.', cursor_position) 

    " Execute the command. 
    execute a:command 

    " Restore the last search. 
    let @/ = search 

    " Restore the previous window position. 
    call setpos('.', window_position) 
    normal! zt 

    " Restore the previous cursor position. 
    call setpos('.', cursor_position) 
endfunction 

" Re-indent the whole buffer. 
function! Indent() 
    call Preserve('normal gg=G') 
endfunction 

あなたはすべての種類のファイルが保存、で自動インデントしたい場合は、私は強く反対をお勧めしています、あなたの.vimrcにこのフックを追加します。

" Indent on save hook 
autocmd BufWritePre <buffer> call Indent() 

を使用すると、自動インデントSA上にある特定のファイルの種類のみをしたい場合私がをお勧めするとし、指示に従ってください。

" Indent on save hook 
autocmd BufWritePre <buffer> call Indent() 

同じように、他のファイルタイプのために行くのJavaのため、すなわち~/.vim/after/ftplugin/java.vimとなります:あなたがC++ファイルが自動インデント~/.vim/after/ftplugin/cpp.vimを作成し、その後、保存して、そこにこのフックを置くになりたいとしましょう。 (;ちょうど=、その後、二回gを押し、その後、Shift+gないコマンド)、あなたはfiletype indent ...ラインを使用している、特に以来、あなたはショートカットgg=Gを使用することができ、既に存在するファイルをインデントする

+0

保存機能ありがとうございます! – ibizaman

関連する問題