0

いくつかの自動構文チェックを行うために.vimrcを構成したい。それが私の問題です。somes構文を別の構文に自動変更したいのです。私は=;のようなコンピュータプログラミングの特定の文字を扱います。、。({[<。

例として、それは言葉よりも優れています:

void bibi(int param1,char *words)
{
 unsigned int locale=param;
 cout<<words<<endl;
}

なりました :

void bibi( int param1,char* words)
{
 unsigned int locale = param;
 cout << words << endl;
}

いくつかの空白を追加または削除してフォーマットするだけです。

私はこれを書きます:

    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " Formating of text in code
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

    function! ChangeSpaces()
    "" search and replace "= " or " =" or "= " to " = " 
    silent! %s/\s*[=]\s*/ = /g
    endfunction

    ""autocmd CursorMovedI * call ChangeSpaces()
    ""autocmd BufWrite * call ChangeSpaces()
    autocmd FileAppendPre * call ChangeSpaces()

しかし、結果はありません。この場合、「i = e」と書くと何もしませんが、「i =」と書くと機能し、正規表現は実行されず、「」の終了後に置き換えられます。パターン"。

ちなみに、私がやりたいことをもっと「セクシーな方法」でやる方法があれば、教えてください。実際、他の特定の文字を追加したい場合、コードは次のようになります。

    "function! ChangeSpaces()
     "" search and replace "= " or " =" or "= " to " = " 
     "silent! %s/\s*[=]\s*/ = /g

     """ search and replace "( " or " (" or "(" to " ( "
     ""      silent! %s/\s*[(]\s*/ ( /g
     """ search and replace "[ " or " [" or "[" to " [ "
     ""      silent! %s/\s*[[]\s*/ [ /g

     """ search and replace ", " or " ," or "," to " , "
     ""      silent! %s/\s*[,]\s*/ , /g

     """ search and replace "== " or " ==" or "==" to " == "
     ""      silent! %s/\s*[==]\s*/ = /g

     """ search and replace "> " or " >" or ">" to " > "
     ""      silent! %s/\s*[>]\s*/ > /g
     """ search and replace ">= " or " >=" or ">=" to " >= "
     "      silent! %s/\s*[>=]\s*/ >= /g

     """ search and replace "< " or " <" or "<" to " < "
     ""      silent! %s/\s*[<]\s*/ < /g
     """ search and replace "<= " or " <=" or "<=" to " <= "
     ""      silent! %s/\s*[=]\s*/ <= /g


     ""       let repl=substitute(cline,\s*[= ]\s*," = ", "g")
     ""       call setline(".",repl)
     ""       let cline=line(".")
     ""       let ccol=col(".")
     ""       call cursor(cline, ccol)
   "endfunction

   ""autocmd CursorMovedI * call ChangeSpaces()
   ""autocmd BufWrite * call ChangeSpaces()
   "autocmd FileAppendPre * call ChangeSpaces()

よろしくお願いします。

PS:悪いことに、C ++だけでなく、使用するすべての言語に対して、この種のフォーマットが必要です。

4

1 に答える 1

1

外部の C++ インデンターを介してファイルをフィルター処理するのはどうですか? GNU インデントは、C++ 用に設計されていないと言っていますが、かなりうまく機能します。そうでない場合は、astyleを試してみてください。その後、あなたがしなければならないのは

map <F8> :w<CR>m':%!astyle<CR>`'

そうすれば、他のエディターを使用している人でも同じインデント スタイルを使用できます。

于 2013-03-20T10:42:39.533 に答える