Я хочу выполнить "go install" в текущем каталоге (где находится открытый документ) с помощью команды (например, GoInstall).

Как я могу это сделать?

Примечание: я хочу увидеть вывод этой команды тоже.

Я добавил command Goin execute "go install" для _gvimrc и _vimrc (я на Windows), но она не работает - говорит, что это не команда редактора - или дает E488, и я не уверен, что она выполняется в текущем каталоге.

ОБНОВИТЬ:

После некоторых попыток лучше узнать Vim и, в основном, путем поиска в Google, я получил файл _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>

Примечание. В вашей системе необходимо настроить как минимум GVOOT и GOPATH env-vars.

1 ответ1

3

:execute для встроенных команд Ex, вы хотите :! Команда для выполнения внешней команды:

:!go install

Похоже, что опция 'makeprg' будет полезна и здесь. Компиляция настолько частая задача, что в vi / Vim встроен механизм запуска. если ты

:set makeprg=go

Вы можете запустить сборку с помощью :make install .


Чтобы перейти в текущий каталог, используйте

:cd %:h

или (чтобы всегда к этому автоматически):

:set autochdir

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .