我发现:cwindow命令非常有用,我想知道是否可以使用我的编译代码的输出获得类似的功能。我会输出:!./a.out以出现在“quickfix”样式缓冲区中。Vim:打开显示可执行文件输出的临时缓冲区
我也注意到,即使在采取标准步骤以防止“按Enter键继续”消息之后,它至少仍会发生一次:make和:!./ a.out - using:silent to suppress这会导致我的tmux完全空白。我目前的解决方法涉及到有很多回车的映射,有没有另外一种方法?
我发现:cwindow命令非常有用,我想知道是否可以使用我的编译代码的输出获得类似的功能。我会输出:!./a.out以出现在“quickfix”样式缓冲区中。Vim:打开显示可执行文件输出的临时缓冲区
我也注意到,即使在采取标准步骤以防止“按Enter键继续”消息之后,它至少仍会发生一次:make和:!./ a.out - using:silent to suppress这会导致我的tmux完全空白。我目前的解决方法涉及到有很多回车的映射,有没有另外一种方法?
ls
我发现这一点:
" 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
" }}}
in steve losh的.vimrc - see我无耻复制。
当然,你可以使用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
,并查看结果在预览窗口
我刚刚发现了:read
命令,该命令将shell命令的输出放入窗口中。
我去找这个,因为我经常想要grep当前目录中包含某个字符串的文件(然后将其打开到我当前的VIM中)。
这里是一个捷径我在我的$MYVIMRC
:
noremap <leader>g :new<CR>:read ! grep -rn "
有了这个,当我按下\g
我得到了一个拆分窗口中创建一个新的缓冲区,并找到
:read ! grep -rn "
坐着等待我在指挥区。现在我只需输入搜索字符串,关闭双引号,然后点击<Enter>
并使用命令输出填充缓冲区。
一旦这样做,简单的
:bw!
在新的缓冲区将其杀死。
首先打开一个预览窗口,并设置自动读文件:
: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>
我以为会是只需要两个<CR>
秒,但随后发现自己需要三人。
这会导致vim给我彩色的“按ENTER”提示,即使我已采取措施避免出现提示(setcmdheight = 2)的味道。有什么办法可以避免这种情况? –
嗯,这在gvim中并没有发生,但是我现在已经在vim上试过了,并且看到了这个问题。尝试以上,它为我修复它。 – Benj
这种情况下工作,不幸的是我没有测试它在一个实际的可执行文件 - 现在我挖掘了其他问题。 'code':Runcmd ./a.out'code'会用二进制噪声填充预览屏幕,'code':Runcmd a.out'code'会再次导致“Press Enter”提示,只需简单的“Shell returned X”正在输出 –