简体   繁体   English

如何直接从vim运行go lang代码?

[英]How to run go lang code directly from vim?

How to run go lang code directly from vim editor ?如何直接从vim editor运行go lang code

eg currently edited file is array.go .例如,当前编辑的文件是array.go What kind of commands should I use to run this code in vim?我应该使用什么样的命令在 vim 中运行这段代码?

好的,经过一些试验后,这有效: !go run %

Assuming that you've set environment variables properly;假设您已正确设置环境变量; you can use this _gvimrc file (on Windows, it should be at C:\\Users\\UserName ; on Linux, I do not know):你可以使用这个_gvimrc文件(在 Windows 上,它应该在C:\\Users\\UserName ;在 Linux 上,我不知道):

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
set nobackup
" set nowritebackup

" 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

" my additional tools
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>')
command! -complete=shellcmd -nargs=* -bang Got call s:ExecuteInShell('go test -v', '<bang>')

:map <F5>  :Gor<CR>
:map <F6>  :Gob<CR>
:map <F7>  :Gon<CR>
:map <F9>  :Got<CR>
:map <F10> :Fmt<CR>:w<CR>
:map <F12> :q<CR>

cabbrev fmt Fmt

:set encoding=utf-8
:set fileencodings=utf-8

Now when you press F5 it will run go ( go run file.go ) and shows the output in another document (you can :q to close the other document).现在,当您按F5 ,它将运行 go ( go run file.go ) 并在另一个文档中显示输出(您可以:q关闭另一个文档)。 Other commands are: F6 build, F7 install, F9 test and (my beloved one) F10 is fmt + :w .其他命令是: F6 build、 F7 install、 F9 test 和(我心爱的) F10fmt + :w

BTW dejavu is my favorite color-scheme (code is from gorilla/mux):顺便说一句, dejavu是我最喜欢的配色方案(代码来自 gorilla/mux):

在此处输入图片说明

You can also map a key in your ~/.vimrc as this你也可以在你的~/.vimrc映射一个键作为这个

nnoremap gr :!go run %<CR>

So you can easily type gr in your vim and it will execute.所以你可以很容易地在你的 vim 中输入gr并且它会执行。

add the following two lines to your vimrc.将以下两行添加到您的 vimrc 中。

autocmd FileType go map <buffer> <F9> :w<CR>:exec '!go run' shellescape(@%, 1)<CR>

autocmd FileType go imap <buffer> <F9> <esc>:w<CR>:exec '!go run' shellescape(@%, 1)<CR>

this is inspired by an answer to a similar python question这受到了对类似 python 问题的回答的启发

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM