6

このコマンドは非常に便利であることがわかり:cwindow、コンパイルされたコードの出力を使用して同様の機能を取得できるかどうか疑問に思いました。の出力を:!./a.out「クイックフィックス」スタイルのバッファーに表示します。

"Press Enter to continue"また、メッセージを防ぐための標準的な手順を実行した後でも、少なくとも1回は発生し、これを抑制するため:make:!./a.out使用:silentすると、tmuxが完全に空白になることにも気づきました。私の現在の回避策には、多くのキャリッジリターンを使用したマッピングが含まれますが、別の方法はありますか?

4

4 に答える 4

11

確かに、vimのプレビューウィンドウを短い関数で使用してコマンドを実行できます。.vimrcでこれを試してください。

fun! Runcmd(cmd)
    silent! exe "noautocmd botright pedit ".a:cmd
    noautocmd wincmd P
    set buftype=nofile
    exe "noautocmd r! ".a:cmd
    noautocmd wincmd p
endfun
com! -nargs=1 Runcmd :call Runcmd("<args>")

次に、次のことができます。

:Runcmd ls

lsプレビューウィンドウで結果を確認します

于 2012-05-08T09:15:41.677 に答える
3

私はこれを見つけました:

" Shell ------------------------------------------------------------------- {{{

function! s:ExecuteInShell(command) " {{{
    let command = join(map(split(a:command), 'expand(v:val)'))
    let winnr = bufwinnr('^' . command . '$')
    silent! execute  winnr < 0 ? 'botright vnew ' . fnameescape(command) : winnr . 'wincmd w'
    setlocal buftype=nowrite bufhidden=wipe nobuflisted noswapfile nowrap nonumber
    echo 'Execute ' . command . '...'
    silent! execute 'silent %!'. command
    silent! redraw
    silent! execute 'au BufUnload <buffer> execute bufwinnr(' . bufnr('#') . ') . ''wincmd w'''
    silent! execute 'nnoremap <silent> <buffer> <LocalLeader>r :call <SID>ExecuteInShell(''' . command . ''')<CR>:AnsiEsc<CR>'
    silent! execute 'nnoremap <silent> <buffer> q :q<CR>'
    silent! execute 'AnsiEsc'
    echo 'Shell command ' . command . ' executed.'
endfunction " }}}
command! -complete=shellcmd -nargs=+ Shell call s:ExecuteInShell(<q-args>)
nnoremap <leader>! :Shell

" }}}

steveloshの.vimrcで-恥知らずにコピーしたものを見てください。

于 2012-05-09T08:09:29.167 に答える
0

:readシェルコマンドの出力をウィンドウに表示するコマンドを発見しました。

特定の文字列を含む現在のディレクトリ内のファイルをgrepしたいので、これを探しに行きました(そして、それを現在のVIMで開きます)。

これが私のショートカットです$MYVIMRC

noremap <leader>g :new<CR>:read ! grep -rn "

これで、を押す\gと、分割ウィンドウで作成された新しいバッファを取得し、

:read ! grep -rn "

コマンドエリアで私を待って座っています。ここで、検索文字列を入力し、二重引用符を閉じてヒット<Enter>すると、コマンド出力でバッファーがいっぱいになります。

完了したら、簡単です

:bw!

その新しいバッファでそれを殺します。

于 2014-11-06T14:32:41.133 に答える
0

最初にプレビューウィンドウを開き、ファイルを自動読み取りするように設定します。

:botr pedit +:setl\ autoread /tmp/out.log

コマンドを実行して、出力をファイルに送信します。

:!date > /tmp/out.log 2>&1

コマンドの結果がプレビューウィンドウに表示されます。

ただし、まだ「Enterキーを押してください」というプロンプトが表示されます。これを回避する簡単な方法は、Enterキーを押すマッピングを作成することです。

:nmap <Leader>r :exec '!date > /tmp/out.log 2>&1'<CR><CR><CR>

必要なのは2つだけだと思って<CR>いましたが、3つ必要でした。

于 2016-07-14T19:52:27.937 に答える