我发现:cwindow命令非常有用,我想知道是否可以使用编译代码的输出获得类似的功能。我的输出:!。/ a.out出现在“quickfix”样式缓冲区中。
我还注意到,即使采取标准步骤以防止“按Enter继续”消息,它仍然至少发生一次:make和:!。/ a.out - 使用:silent来抑制此导致我的tmux完全空白。我目前的解决方法是涉及到大量回车的映射,还有另外一种方法吗?
答案 0 :(得分:5)
当然,你可以使用带有短函数的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
的结果
答案 1 :(得分:2)
我发现了这个:
" 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
" }}}
史蒂夫洛什的.vimrc - see我无耻地复制了。
答案 2 :(得分:0)
我刚刚发现了:read
命令,它将shell命令的输出放入窗口。
我去寻找这个因为我经常想要在当前目录中grep一个包含某个字符串的文件(然后将其打开到我当前的VIM中)。
以下是我$MYVIMRC
中的快捷方式:
noremap <leader>g :new<CR>:read ! grep -rn "
有了这个,当我按下\g
时,我会在分割窗口中创建一个新缓冲区并找到
:read ! grep -rn "
坐在命令区等我。现在我只需输入我的搜索字符串,关闭双引号并点击<Enter>
,缓冲区就会填充命令输出。
完成后,一个简单的
:bw!
在新的缓冲区中会杀死它。
答案 3 :(得分:0)
首先打开一个预览窗口,并将其设置为自动转发文件:
:botr pedit +:setl\ autoread /tmp/out.log
现在运行您的命令,并将输出发送到文件。
:!date > /tmp/out.log 2>&1
您的命令结果应出现在预览窗口中。
但是,我们仍然按下了#34;按ENTER键&#34;提示。避免这种情况的一种简单方法是制作一个按Enter键的映射:
:nmap <Leader>r :exec '!date > /tmp/out.log 2>&1'<CR><CR><CR>
我认为只需要两个<CR>
,但后来发现自己需要三个。