:
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
を、私はこれをやってみたことと、私がしようとすると、コメント機能を実行する 'E488:Trailing characters'というエラーが表示されます。特殊文字をエスケープする必要がありますか? – user2802557
@ user2802557この関数を実行するとこのエラーは発生しません。あなたが最後に試した正確なコードを質問に投稿できますか? – user852573
@ user2802557ファイルの最初の3行をコメントする関数を呼び出すには(例として) ':call Comment(1,3)'を実行してみてください。関数とコマンドの呼び出し方法の詳細を追加する答えを編集しました。 – user852573