我想使用命令(如:GoInstall)在当前目录(当前打开的文档所在的位置)执行“go install”。
我怎样才能做到这一点?
注意:我也想查看该命令的输出。
我已经添加到command Goin execute "go install"
_gvimrc 和 _vimrc (我在 Windows 上),但它不起作用 - 说它不是一个编辑器命令 - 或者给出 E488 并且我不确定它是否在当前目录中执行。
更新:
在努力了解 Vim 之后,我主要通过谷歌搜索,最终得到了这个 _gvimrc 文件,它运行完美(至少对我来说)。它添加了三个命令 Gon、Gob 和 Gor 来运行go install
,go build
并go run current_file.go
在 Vim 的另一个文档(缓冲区)中显示结果。希望它能帮助其他 Vim 初学者:
set guifont=Lucida_Console:h11
colorscheme dejavu
set tabstop=4
filetype plugin on
filetype plugin indent on
syntax on
" causes vim opens maximized in windows (@least)
au GUIEnter * simalt ~x
set autochdir
set number
" this made my vim life (as a begginer at least) much happier!
" thanks to @ http://vim.wikia.com/wiki/Display_output_of_shell_commands_in_new_window bottom of the page
function! s:ExecuteInShell(command, bang)
let _ = a:bang != '' ? s:_ : a:command == '' ? '' : join(map(split(a:command), 'expand(v:val)'))
if (_ != '')
let s:_ = _
let bufnr = bufnr('%')
let winnr = bufwinnr('^' . _ . '$')
silent! execute winnr < 0 ? 'belowright new ' . fnameescape(_) : winnr . 'wincmd w'
setlocal buftype=nowrite bufhidden=wipe nobuflisted noswapfile wrap number
silent! :%d
let message = 'Execute ' . _ . '...'
call append(0, message)
echo message
silent! 2d | resize 1 | redraw
silent! execute 'silent! %!'. _
silent! execute 'resize ' . line('$')
silent! execute 'syntax on'
silent! execute 'autocmd BufUnload <buffer> execute bufwinnr(' . bufnr . ') . ''wincmd w'''
silent! execute 'autocmd BufEnter <buffer> execute ''resize '' . line(''$'')'
silent! execute 'nnoremap <silent> <buffer> <CR> :call <SID>ExecuteInShell(''' . _ . ''', '''')<CR>'
silent! execute 'nnoremap <silent> <buffer> <LocalLeader>r :call <SID>ExecuteInShell(''' . _ . ''', '''')<CR>'
silent! execute 'nnoremap <silent> <buffer> <LocalLeader>g :execute bufwinnr(' . bufnr . ') . ''wincmd w''<CR>'
nnoremap <silent> <buffer> <C-W>_ :execute 'resize ' . line('$')<CR>
silent! syntax on
endif
endfunction
command! -complete=shellcmd -nargs=* -bang Shell call s:ExecuteInShell(<q-args>, '<bang>')
cabbrev shell Shell
command! -complete=shellcmd -nargs=* -bang Gor call s:ExecuteInShell('go run %', '<bang>')
command! -complete=shellcmd -nargs=* -bang Gon call s:ExecuteInShell('go install', '<bang>')
command! -complete=shellcmd -nargs=* -bang Gob call s:ExecuteInShell('go build', '<bang>')
:map <F5> :Gor<CR>
:map <F6> :Gob<CR>
:map <F7> :Gon<CR>
注意:您必须在系统上至少设置 GOROOT 和 GOPATH 环境变量。
答案1
:execute
用于内置 Ex 命令,您希望该:!
命令执行外部的命令:
:!go install
看来这个'makeprg'
选项在这里也很有用。编译是一项非常频繁的任务,因此 vi / Vim 内置了触发机制。如果你
:set makeprg=go
您可以使用 来触发构建:make install
。
要切换到当前目录,请使用
:cd %:h
或(始终自动执行此操作):
:set autochdir