mirror of
				https://github.com/amix/vimrc
				synced 2025-10-31 23:13:35 +08:00 
			
		
		
		
	Updated vim plugins
This commit is contained in:
		| @ -87,32 +87,21 @@ fu! s:gocodeCurrentBufferOpt(filename) | ||||
|     return '-in=' . a:filename | ||||
| endf | ||||
|  | ||||
| fu! go#complete#gocodeCursor() | ||||
|     if &encoding != 'utf-8' | ||||
|         let sep = &l:fileformat == 'dos' ? "\r\n" : "\n" | ||||
|         let c = col('.') | ||||
|         let buf = line('.') == 1 ? "" : (join(getline(1, line('.')-1), sep) . sep) | ||||
|         let buf .= c == 1 ? "" : getline('.')[:c-2] | ||||
|         return printf('%d', len(iconv(buf, &encoding, "utf-8"))) | ||||
|     endif | ||||
|  | ||||
|     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'), go#complete#gocodeCursor()]) | ||||
|                 \ [expand('%:p'), go#util#OffsetCursor()]) | ||||
|     call delete(filename) | ||||
|     return result | ||||
| endf | ||||
|  | ||||
| function! go#complete#GetInfoFromOffset(offset) | ||||
| function! go#complete#GetInfo() | ||||
|     let offset = go#util#OffsetCursor()+1 | ||||
|     let filename = s:gocodeCurrentBuffer() | ||||
|     let result = s:gocodeCommand('autocomplete', | ||||
|                 \ [s:gocodeCurrentBufferOpt(filename), '-f=godit'], | ||||
|                 \ [expand('%:p'), a:offset]) | ||||
|                 \ [expand('%:p'), offset]) | ||||
|     call delete(filename) | ||||
|  | ||||
|     " first line is: Charcount,,NumberOfCandidates, i.e: 8,,1 | ||||
| @ -148,11 +137,6 @@ function! go#complete#GetInfoFromOffset(offset) | ||||
|     return "" | ||||
| endfunction | ||||
|  | ||||
| function! go#complete#GetInfo() | ||||
|     let offset = go#complete#gocodeCursor()+1 | ||||
|     return go#complete#GetInfoFromOffset(offset) | ||||
| endfunction | ||||
|  | ||||
| function! go#complete#Info(auto) | ||||
|     " auto is true if we were called by g:go_auto_type_info's autocmd | ||||
|     let result = go#complete#GetInfo() | ||||
|  | ||||
| @ -15,9 +15,7 @@ endf | ||||
| " modified and improved version of vim-godef | ||||
| function! go#def#Jump(...) | ||||
| 	if !len(a:000) | ||||
| 		" gives us the offset of the word, basicall the position of the word under | ||||
| 		" he cursor | ||||
| 		let arg = s:getOffset() | ||||
| 		let arg = "-o=" . go#util#OffsetCursor() | ||||
| 	else | ||||
| 		let arg = a:1 | ||||
| 	endif | ||||
| @ -43,7 +41,7 @@ endfunction | ||||
|  | ||||
|  | ||||
| function! go#def#JumpMode(mode) | ||||
| 	let arg = s:getOffset() | ||||
| 	let arg = "-o=" . go#util#OffsetCursor() | ||||
|  | ||||
| 	let bin_path = go#path#CheckBinPath(g:go_godef_bin) | ||||
| 	if empty(bin_path) | ||||
| @ -65,18 +63,7 @@ endfunction | ||||
|  | ||||
|  | ||||
| function! s:getOffset() | ||||
| 	let pos = getpos(".")[1:2] | ||||
| 	if &encoding == 'utf-8' | ||||
| 		let offs = line2byte(pos[0]) + pos[1] - 2 | ||||
| 	else | ||||
| 		let c = pos[1] | ||||
| 		let buf = line('.') == 1 ? "" : (join(getline(1, pos[0] - 1), go#util#LineEnding()) . go#util#LineEnding()) | ||||
| 		let buf .= c == 1 ? "" : getline(pos[0])[:c-2] | ||||
| 		let offs = len(iconv(buf, &encoding, "utf-8")) | ||||
| 	endif | ||||
|  | ||||
| 	let argOff = "-o=" . offs | ||||
| 	return argOff | ||||
| 	return "-o=" . go#util#OffsetCursor() | ||||
| endfunction | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -62,15 +62,6 @@ func! s:loclistSecond(output) | ||||
|     call go#list#Window("locationlist", len(errors)) | ||||
| endfun | ||||
|  | ||||
| func! s:getpos(l, c) | ||||
|     if &encoding != 'utf-8' | ||||
|         let buf = a:l == 1 ? '' : (join(getline(1, a:l-1), "\n") . "\n") | ||||
|         let buf .= a:c == 1 ? '' : getline('.')[:a:c-2] | ||||
|         return len(iconv(buf, &encoding, 'utf-8')) | ||||
|     endif | ||||
|     return line2byte(a:l) + (a:c-2) | ||||
| endfun | ||||
|  | ||||
| func! s:RunOracle(mode, selected, needs_package) range abort | ||||
|     let fname = expand('%:p') | ||||
|     let dname = expand('%:p:h') | ||||
| @ -102,13 +93,13 @@ func! s:RunOracle(mode, selected, needs_package) range abort | ||||
|     endif | ||||
|  | ||||
|     if a:selected != -1 | ||||
|         let pos1 = s:getpos(line("'<"), col("'<")) | ||||
|         let pos2 = s:getpos(line("'>"), col("'>")) | ||||
|         let pos1 = go#util#Offset(line("'<"), col("'<")) | ||||
|         let pos2 = go#util#Offset(line("'>"), col("'>")) | ||||
|         let cmd = printf('%s -format plain -pos=%s:#%d,#%d -tags=%s %s', | ||||
|                     \  bin_path, | ||||
|                     \  shellescape(fname), pos1, pos2, tags, a:mode) | ||||
|     else | ||||
|         let pos = s:getpos(line('.'), col('.')) | ||||
|         let pos = go#util#OffsetCursor() | ||||
|         let cmd = printf('%s -format plain -pos=%s:#%d -tags=%s %s', | ||||
|                     \  bin_path, | ||||
|                     \  shellescape(fname), pos, tags, a:mode) | ||||
|  | ||||
| @ -144,7 +144,6 @@ function! go#path#CheckBinPath(binpath) | ||||
|         return binpath | ||||
|     endif | ||||
|  | ||||
|  | ||||
|     " just get the basename | ||||
|     let basename = fnamemodify(binpath, ":t") | ||||
|  | ||||
|  | ||||
| @ -31,7 +31,7 @@ function! go#rename#Rename(bang, ...) | ||||
|     endif | ||||
|  | ||||
|     let fname = expand('%:p') | ||||
|     let pos = s:getpos(line('.'), col('.')) | ||||
|     let pos = go#util#OffsetCursor() | ||||
|     let cmd = printf('%s -offset %s -to %s', shellescape(bin_path), shellescape(printf('%s:#%d', fname, pos)), shellescape(to)) | ||||
|  | ||||
|     let out = go#tool#ExecuteInDir(cmd) | ||||
| @ -65,14 +65,5 @@ function! go#rename#Rename(bang, ...) | ||||
|     silent execute ":e" | ||||
| endfunction | ||||
|  | ||||
| func! s:getpos(l, c) | ||||
|     if &encoding != 'utf-8' | ||||
|         let buf = a:l == 1 ? '' : (join(getline(1, a:l-1), "\n") . "\n") | ||||
|         let buf .= a:c == 1 ? '' : getline('.')[:a:c-2] | ||||
|         return len(iconv(buf, &encoding, 'utf-8')) | ||||
|     endif | ||||
|     return line2byte(a:l) + (a:c-2) | ||||
| endfun | ||||
|  | ||||
| " vim:ts=4:sw=4:et | ||||
| " | ||||
|  | ||||
| @ -1,15 +1,180 @@ | ||||
| if !exists("g:go_textobj_enabled") | ||||
|     let g:go_textobj_enabled = 1 | ||||
|   let g:go_textobj_enabled = 1 | ||||
| endif | ||||
|  | ||||
| if !exists("g:go_textobj_include_function_doc") | ||||
|   let g:go_textobj_include_function_doc = 1 | ||||
| endif | ||||
|  | ||||
| " ( ) motions | ||||
| " { } motions | ||||
| " s for sentence | ||||
| " p for parapgrah | ||||
| " < > | ||||
| " t for tag | ||||
|  | ||||
| function! go#textobj#Function(mode) | ||||
|   if search('^\s*func .*{$', 'Wce', line('.')) <= 0 | ||||
|         \ && search('^\s*func .*{$', 'bWce') <= 0 | ||||
|   let offset = go#util#OffsetCursor() | ||||
|  | ||||
|   let fname = expand("%:p") | ||||
|   if &modified | ||||
|     " Write current unsaved buffer to a temp file and use the modified content | ||||
|     let l:tmpname = tempname() | ||||
|     call writefile(getline(1, '$'), l:tmpname) | ||||
|     let fname = l:tmpname | ||||
|   endif | ||||
|  | ||||
|   let bin_path = go#path#CheckBinPath('motion') | ||||
|   if empty(bin_path) | ||||
|     return | ||||
|   endif | ||||
|   if a:mode == 'a' | ||||
|     normal! Va{V | ||||
|   else " a:mode == 'i' | ||||
|     normal! Vi{V | ||||
|  | ||||
|   let command = printf("%s -format vim -file %s -offset %s", bin_path, fname, offset) | ||||
|   let command .= " -mode enclosing" | ||||
|  | ||||
|   if g:go_textobj_include_function_doc | ||||
|     let command .= " -parse-comments" | ||||
|   endif | ||||
|  | ||||
|   let out = system(command) | ||||
|   if v:shell_error != 0 | ||||
|     call go#util#EchoError(out) | ||||
|     return | ||||
|   endif | ||||
|  | ||||
|   " if exists, delete it as we don't need it anymore | ||||
|   if exists("l:tmpname") | ||||
|     call delete(l:tmpname) | ||||
|   endif | ||||
|  | ||||
|   " convert our string dict representation into native Vim dictionary type | ||||
|   let result = eval(out) | ||||
|   if type(result) != 4 || !has_key(result, 'fn') | ||||
|     return | ||||
|   endif | ||||
|  | ||||
|   let info = result.fn | ||||
|  | ||||
|   if a:mode == 'a' | ||||
|     " anonymous functions doesn't have associated doc. Also check if the user | ||||
|     " want's to include doc comments for function declarations | ||||
|     if has_key(info, 'doc') && g:go_textobj_include_function_doc | ||||
|       call cursor(info.doc.line, info.doc.col) | ||||
|     else | ||||
|       call cursor(info.func.line, info.func.col) | ||||
|     endif | ||||
|  | ||||
|     normal! v | ||||
|     call cursor(info.rbrace.line, info.rbrace.col) | ||||
|     return | ||||
|   endif  | ||||
|  | ||||
|   " rest is inner mode, a:mode == 'i' | ||||
|  | ||||
|   " if the function is a one liner we need to select only that portion | ||||
|   if info.lbrace.line == info.rbrace.line | ||||
|     call cursor(info.lbrace.line, info.lbrace.col+1) | ||||
|     normal! v | ||||
|     call cursor(info.rbrace.line, info.rbrace.col-1) | ||||
|     return | ||||
|   endif | ||||
|  | ||||
|   call cursor(info.lbrace.line+1, 1) | ||||
|   normal! V | ||||
|   call cursor(info.rbrace.line-1, 1) | ||||
| endfunction | ||||
|  | ||||
| function! go#textobj#FunctionJump(mode, direction) | ||||
|   " get count of the motion. This should be done before all the normal | ||||
|   " expressions below as those reset this value(because they have zero | ||||
|   " count!). We abstract -1 because the index starts from 0 in motion. | ||||
|   let l:cnt = v:count1 - 1 | ||||
|  | ||||
|   " set context mark so we can jump back with  '' or `` | ||||
|   normal! m' | ||||
|  | ||||
|   " select already previously selected visual content and continue from there. | ||||
|   " If it's the first time starts with the visual mode. This is needed so | ||||
|   " after selecting something in visual mode, every consecutive motion | ||||
|   " continues. | ||||
|   if a:mode == 'v' | ||||
|     normal! gv | ||||
|   endif | ||||
|  | ||||
|   let offset = go#util#OffsetCursor() | ||||
|  | ||||
|   let fname = expand("%:p") | ||||
|   if &modified | ||||
|     " Write current unsaved buffer to a temp file and use the modified content | ||||
|     let l:tmpname = tempname() | ||||
|     call writefile(getline(1, '$'), l:tmpname) | ||||
|     let fname = l:tmpname | ||||
|   endif | ||||
|  | ||||
|   let bin_path = go#path#CheckBinPath('motion') | ||||
|   if empty(bin_path) | ||||
|     return | ||||
|   endif | ||||
|  | ||||
|   let command = printf("%s -format vim -file %s -offset %s", bin_path, fname, offset) | ||||
|   let command .= ' -shift ' . l:cnt | ||||
|  | ||||
|   if a:direction == 'next' | ||||
|     let command .= ' -mode next' | ||||
|   else " 'prev' | ||||
|     let command .= ' -mode prev' | ||||
|   endif | ||||
|  | ||||
|   if g:go_textobj_include_function_doc | ||||
|     let command .= " -parse-comments" | ||||
|   endif | ||||
|  | ||||
|   let out = system(command) | ||||
|   if v:shell_error != 0 | ||||
|     call go#util#EchoError(out) | ||||
|     return | ||||
|   endif | ||||
|  | ||||
|   " if exists, delete it as we don't need it anymore | ||||
|   if exists("l:tmpname") | ||||
|     call delete(l:tmpname) | ||||
|   endif | ||||
|  | ||||
|   " convert our string dict representation into native Vim dictionary type | ||||
|   let result = eval(out) | ||||
|   if type(result) != 4 || !has_key(result, 'fn') | ||||
|     return | ||||
|   endif | ||||
|  | ||||
|   " we reached the end and there are no functions. The usual [[ or ]] jumps to | ||||
|   " the top or bottom, we'll do the same. | ||||
|   if type(result) == 4 && has_key(result, 'err') && result.err == "no functions found" | ||||
|     if a:direction == 'next' | ||||
|       keepjumps normal! G | ||||
|     else " 'prev' | ||||
|       keepjumps normal! gg | ||||
|     endif | ||||
|     return | ||||
|   endif | ||||
|  | ||||
|   let info = result.fn | ||||
|  | ||||
|   " if we select something ,select all function | ||||
|   if a:mode == 'v' && a:direction == 'next' | ||||
|     keepjumps call cursor(info.rbrace.line, 1) | ||||
|     return | ||||
|   endif | ||||
|  | ||||
|   if a:mode == 'v' && a:direction == 'prev' | ||||
|     if has_key(info, 'doc') && g:go_textobj_include_function_doc | ||||
|       keepjumps call cursor(info.doc.line, 1) | ||||
|     else | ||||
|       keepjumps call cursor(info.func.line, 1) | ||||
|     endif | ||||
|     return | ||||
|   endif | ||||
|  | ||||
|   keepjumps call cursor(info.func.line, 1) | ||||
| endfunction | ||||
|  | ||||
| " vim:ts=2:sw=2:et | ||||
|  | ||||
| @ -85,6 +85,22 @@ function! go#util#Shelllist(arglist, ...) | ||||
|     endtry | ||||
| endfunction | ||||
|  | ||||
| " Returns the byte offset for line and column | ||||
| function! go#util#Offset(line, col) | ||||
|     if &encoding != 'utf-8' | ||||
|         let sep = go#util#LineEnding() | ||||
|         let buf = a:line == 1 ? '' : (join(getline(1, a:line-1), sep) . sep) | ||||
|         let buf .= a:col == 1 ? '' : getline('.')[:a:col-2] | ||||
|         return len(iconv(buf, &encoding, 'utf-8')) | ||||
|     endif | ||||
|     return line2byte(a:line) + (a:col-2) | ||||
| endfunction | ||||
| " | ||||
| " Returns the byte offset for the cursor | ||||
| function! go#util#OffsetCursor() | ||||
|     return go#util#Offset(line('.'), col('.')) | ||||
| endfunction | ||||
|  | ||||
| " TODO(arslan): I couldn't parameterize the highlight types. Check if we can | ||||
| " simplify the following functions | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 amix
					amix