Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

go in vim

  • Loading branch information...
commit 7ba4ebacb3564a56f69bd4a5891207c47db3e7de 1 parent 18d4ad5
@utaal authored
View
1  gvimrc
@@ -5,3 +5,4 @@ set guioptions-=LlRrb
colorscheme wombat-my
set cursorline
+
View
6 update.sh
@@ -1,3 +1,9 @@
#!/bin/bash
git submodule foreach git pull origin master
+
+# gocode
+curl https://raw.github.com/nsf/gocode/master/vim/autoload/gocomplete.vim \
+ > vim/custom_bundles/gocode/autoload/gocomplete.vim
+curl https://raw.github.com/nsf/gocode/master/vim/ftplugin/go.vim \
+ > vim/custom_bundles/gocode/ftplugin/go.vim
View
73 vim/bundle/gocode/autoload/gocomplete.vim
@@ -0,0 +1,73 @@
+if exists('g:loaded_gocode')
+ finish
+endif
+let g:loaded_gocode = 1
+
+fu! s:gocodeCurrentBuffer()
+ let buf = getline(1, '$')
+ if &l:fileformat == 'dos'
+ " XXX: line2byte() depend on 'fileformat' option.
+ " so if fileformat is 'dos', 'buf' must include '\r'.
+ let buf = map(buf, 'v:val."\r"')
+ endif
+ let file = tempname()
+ call writefile(buf, file)
+ return file
+endf
+
+fu! s:system(str, ...)
+ return (a:0 == 0 ? system(a:str) : system(a:str, join(a:000)))
+endf
+
+fu! s:gocodeShellescape(arg)
+ try
+ let ssl_save = &shellslash
+ set noshellslash
+ return shellescape(a:arg)
+ finally
+ let &shellslash = ssl_save
+ endtry
+endf
+
+fu! s:gocodeCommand(cmd, preargs, args)
+ for i in range(0, len(a:args) - 1)
+ let a:args[i] = s:gocodeShellescape(a:args[i])
+ endfor
+ for i in range(0, len(a:preargs) - 1)
+ let a:preargs[i] = s:gocodeShellescape(a:preargs[i])
+ endfor
+ let result = s:system(printf('gocode %s %s %s', join(a:preargs), a:cmd, join(a:args)))
+ if v:shell_error != 0
+ return "[\"0\", []]"
+ else
+ return result
+ endif
+endf
+
+fu! s:gocodeCurrentBufferOpt(filename)
+ return '-in=' . a:filename
+endf
+
+fu! s:gocodeCursor()
+ return printf('%d', line2byte(line('.')) + (col('.')-2))
+endf
+
+fu! s:gocodeAutocomplete()
+ let filename = s:gocodeCurrentBuffer()
+ let result = s:gocodeCommand('autocomplete',
+ \ [s:gocodeCurrentBufferOpt(filename), '-f=vim'],
+ \ [expand('%:p'), s:gocodeCursor()])
+ call delete(filename)
+ return result
+endf
+
+fu! gocomplete#Complete(findstart, base)
+ "findstart = 1 when we need to get the text length
+ if a:findstart == 1
+ execute "silent let g:gocomplete_completions = " . s:gocodeAutocomplete()
+ return col('.') - g:gocomplete_completions[0] - 1
+ "findstart = 0 when we need to return the list of completions
+ else
+ return g:gocomplete_completions[1]
+ endif
+endf
View
1  vim/bundle/gocode/ftplugin/go.vim
@@ -0,0 +1 @@
+setlocal omnifunc=gocomplete#Complete
View
5 vimrc
@@ -72,6 +72,11 @@ inoremap <expr><CR> neocomplcache#smart_close_popup() . "\<CR>"
" <TAB>: completion.
inoremap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>"
inoremap <expr><BS> neocomplcache#smart_close_popup()."\<C-h>"
+" omnicomplete
+if !exists('g:neocomplcache_omni_patterns')
+ let g:neocomplcache_omni_patterns = {}
+endif
+let g:neocomplcache_omni_patterns.go = '[^. *\t]\.\w*'
" tagbar
nmap <F8> :TagbarToggle<CR>
Please sign in to comment.
Something went wrong with that request. Please try again.