Vim-最後のシェルコマンドをキーにマップする


10

bashに送信された最後のコマンドを繰り返すようにLeader-Rをマップする方法はありますか?

たとえば、Cファイルを使用する場合、:!makeやgccと入力せずにvimからプログラムをコンパイルして実行したいと思います。

特定のコマンドをキーにバインドできることはわかっていますが、他の種類のファイルでは機能しません。

回答:



1

編集:インゴカーカットの答えははるかに優れています。...この投稿が受け入れられなかった場合は削除します(つまり、私はできません)。

これが1つの解決策です。検索するのは最後の100個のコマンドのみです。明らかに、この数値を変更できます(履歴のインデックス作成は、入力した最後のコマンドである-1から始まるため、数値が小さいほど、さらに検索されます)。

fun! LastCommand()
        let l:i = -1
        while l:i > -100
                let l:cmd = histget("cmd", l:i)
                if strpart(l:cmd, 0, 1) == "!"
                        let l:i = 1
                        execute l:cmd
                        break
                endif
                let l:i -= 1
        endwhile

        if l:i < 1 | echoerr "No command found" | endif
endfun
nnoremap <Leader>r :call LastCommand()<CR>

これを削除すると、質問が未回答のままになるので、削除しない方がよいでしょう。私はIngoの回答に賛成票を投じましたが、今ではあなたよりも多くの票を獲得しています。追加した免責事項を考えると、削除は少し厳しいようです。誰がこれが便利だと思うかもしれません。それについて強く感じている場合は、OPにコメントを残して、代わりにIngoの回答を受け入れるよう依頼してください。その後、必要に応じて、自分のものを削除できます。
terdon
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.