2017-07-26 22 views
2

私はmakeprgとして設定するビルドスクリプト" maker "を持っています。このスクリプトは、flag_verboseflag_installという2つの引数をとります。前者は、(プログラムごとに)冗長な出力を与えるかどうかを示唆しています。`makeprg`に可変引数を与える方法

ここで、次のようなキーマッピングを設定したいと考えています。 <F7-(a/d/j/z/i)> :make <return> :copen ここでは、メーカースクリプトに引数を渡したいと思います。 flag_verboseflag_installはそれぞれ(a [apt]/d [x]/j [avac]/z [all])と 'i [nstall]'の1文字で構成されています。

基本的に私は<FN-x>のキーストロークに応じてスクリプトに異なる引数を与えたいと思います.xは異なるフラグです。 vimrcやvimscriptにこのような機能を設定することはできますか?もしそうなら、どうですか?

答えて

3

まず、何<F7-a>表記はありません、あなたは同時にF7を押すことによってトリガされますマッピングを定義することはできません。あなたができることはシーケンス<F7>aと書いてください。これはメタプログラミングを経由して簡略化することができ

nnoremap <F7>a :make a<CR>:copen<CR> 
nnoremap <F7>d :make d<CR>:copen<CR> 
... 

for s:arg in ['a', 'd', 'j', 'z', 'i'] 
    execute printf('nnoremap <F7>%s :make a<CR>:copen<CR>', s:arg) 
endfor 

しかし、私が代わりに準備し、このソリューション、を選ぶでしょう

だから、あなたは、マッピングの次のセットを定義することができコマンドラインが不完全で、引数が置かれる位置にカーソルを置きます。これにより、単一のマッピングしか持たず、複数の引数を渡すこともできません。 [myArgs]、myArgsはメーカースクリプトへのパスになります私がしなければ、ここで

noremap <F7> :execute 'make '<Bar>copen'<Left><Left><Left><Left><Left><Left><Left><Left> 
+0

:欠点は、このコマンドを起動することもをEnterキーを押す必要があるということですか? これは実際に私が混乱している場所です。 2番目のソリューションをお寄せいただきありがとうございます。これは問題を1行で解決し、入力の選択肢を提供します。また、forループよりも効率的です! – Harshiv

+2

はい、あなたは ':set makeprg = maker'のようなものがあると仮定して渡されます。 '$ *'を使って引数がどこに置かれるかを指定することもできます。 ':help:make_makeprg'を参照してください。 –

+0

ここに 'copen'の前に': 'はありませんか?それは ':execute'コマンドのために必要ではありませんか?また、簡略化のために ...シーケンスを '8h'または' 8 'に置き換えることはできますか? – Harshiv

関連する問題