2017-07-28 10 views
2

私のvimrcファイルでは、引数として2行の数値をとり、その範囲のすべての行をコメントアウトする関数を記述しようとしています。私は '^'行の先頭に代わるものを使用していて、関数の外側から呼び出したときにうまく動作する '#'で置き換えています。私はこれまでのところ、これを持っている機能について:vim関数のmissingfunction:endfunctionエラー

function Comment(line1, line2) a:line1,a:line2s/^/#/g endfunction

しかしこれは動作していないと私はVimが言って起動しようとすると、私はエラーを取得しています「行方不明:ENDFUNCTION」あなたのコマンドで

答えて

4

a:line1,a:line2s/^/#/g 

一部の変数は、変数(a:line1およびa:line2)です。彼らは評価される必要があります。これを行うには、変数を除いて文字列の中にコマンドのすべての部分をラップし、ドット演算子ですべての部分を連結し、最後に結果をコマンド:executeに渡して正規のExコマンドとして実行します:

あなたはそれを呼び出すためのコマンドが必要な場合は
execute a:line1.','.a:line2.'s/^/#/g' 

、あなたはこれを試みることができる:

function! Comment(line1, line2) 
    execute a:line1.','.a:line2.'s/^/#/' 
endfunction 

command! -range=% Comment call Comment(<line1>,<line2>) 

それは、同じ名前の関数を呼び出す:Commentコマンドを定義します。範囲は-range属性で定義されているため、範囲を受け入れます。コマンドに範囲を指定しないと、%(= 1,$)がデフォルトの範囲として定義されているため、バッファ全体が使用されます。詳細は:h user-commandsを参照してください。

コマンドを使用するには、あなたが視覚的に実行し、いくつかの行を選択することができます:

:'<,'>Comment 

機能を使用するには、実行することができ、あなたはそのアドレスが10と20の間にある行をコメントすることを望んでいたと仮定すると:

:call Comment(10,20) 

それはあなたの問題にリンクされていないが、あなたは、キーワードfunctionにあなたのスクリプトをソースしますたびに強打を追加しない場合は、エラーがあります:

E122: Function Comment already exists, add ! to replace it 

コマンドについて同じこと、あなたはおそらく、キーワードcommand後に強打を追加したい、そうでない場合はエラーがあります:

E174: Command already exists: add ! to replace it 
+0

を、私はこれをやってみたことと、私がしようとすると、コメント機能を実行する 'E488:Trailing characters'というエラーが表示されます。特殊文字をエスケープする必要がありますか? – user2802557

+0

@ user2802557この関数を実行するとこのエラーは発生しません。あなたが最後に試した正確なコードを質問に投稿できますか? – user852573

+0

@ user2802557ファイルの最初の3行をコメントする関数を呼び出すには(例として) ':call Comment(1,3)'を実行してみてください。関数とコマンドの呼び出し方法の詳細を追加する答えを編集しました。 – user852573