1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-02-03 02:40:05 +08:00

Add mapping for gf

This commit is contained in:
wsdjeg 2016-12-27 22:52:31 +08:00
parent cc1c69f032
commit d91315da8a
3 changed files with 71 additions and 0 deletions

View File

@ -36,3 +36,72 @@ function! zvim#format() abort
normal! gg=G normal! gg=G
call setpos('.', save_cursor) call setpos('.', save_cursor)
endfunction endfunction
function! zvim#gf() abort
if &filetype isnot# 'vim'
return 0
endif
let isk = &l:iskeyword
setlocal iskeyword+=:,<,>,#
try
let line = getline('.')
let start = s:find_start(line, col('.'))
if line[start :] =~? '\%(s:\|<SNR>\|<SID>\)'
let line = substitute(line, '<\%(SNR\|SID\)>', 's:', '')
let path = expand('%')
else
for base_dir in [getcwd()] + split(finddir('autoload', expand('%:p:h') . ';')) + [&runtimepath]
let path = s:autoload_path(base_dir, line[start : ])
if !empty(path)
break
endif
endfor
endif
if !empty(path)
let line = s:search_line(path, matchstr(line[start :], '\k\+'))
let col = start
exe 'e ' . path
call cursor(line, col)
endif
finally
let &l:iskeyword = isk
endtry
endfunction
if has('patch-7.4.279')
function! s:globpath(path, expr) abort "{{{
return globpath(a:path, a:expr, 1, 1)
endfunction "}}}
else
function! s:globpath(path, expr) abort "{{{
return split(globpath(a:path, a:expr), '\n')
endfunction "}}}
endif
function! s:autoload_path(base_dir, function_name) abort "{{{
let match = matchstr(a:function_name, '\k\+\ze#')
let fname = expand('autoload/' . substitute(match, '#', '/', 'g') . '.vim')
let paths = s:globpath(a:base_dir, fname)
return len(paths) > 0 ? paths[0] : ''
endfunction "}}}
function! s:find_start(line, cursor_index) abort "{{{
for i in range(a:cursor_index, 0, -1)
if a:line[i] !~# '\k'
return i+1
endif
endfor
return 0
endfunction "}}}
function! s:search_line(path, term) abort "{{{
let line = match(readfile(a:path), '\s*fu\%[nction]!\?\s*' . a:term . '\>')
if line >= 0
return line+1
endif
return 0
endfunction "}}}

View File

@ -237,3 +237,4 @@ call zvim#util#defineMap('nnoremap <silent>', '<Leader>sv', ':split<CR>:wincmd p
\'Open previous buffer in split window' , 'split|wincmd p|e#') \'Open previous buffer in split window' , 'split|wincmd p|e#')
call zvim#util#defineMap('nnoremap <silent>', '<Leader>sg', ':vsplit<CR>:wincmd p<CR>:e#<CR>', call zvim#util#defineMap('nnoremap <silent>', '<Leader>sg', ':vsplit<CR>:wincmd p<CR>:e#<CR>',
\'Open previous buffer in vsplit window' , 'vsplit|wincmd p|e#') \'Open previous buffer in vsplit window' , 'vsplit|wincmd p|e#')
call zvim#util#defineMap('nnoremap <silent>', 'gf', ':call zvim#gf()<CR>', 'Jump to a file under cursor', '')

View File

@ -22,6 +22,7 @@ else
call deoplete#custom#set('omni', 'mark', '') call deoplete#custom#set('omni', 'mark', '')
endif endif
call deoplete#custom#set('_', 'matchers', ['matcher_full_fuzzy']) call deoplete#custom#set('_', 'matchers', ['matcher_full_fuzzy'])
let g:deoplete#ignore_sources._ = ['around']
"call deoplete#custom#set('omni', 'min_pattern_length', 0) "call deoplete#custom#set('omni', 'min_pattern_length', 0)
inoremap <expr><C-h> deoplete#mappings#smart_close_popup()."\<C-h>" inoremap <expr><C-h> deoplete#mappings#smart_close_popup()."\<C-h>"
inoremap <expr><BS> deoplete#mappings#smart_close_popup()."\<C-h>" inoremap <expr><BS> deoplete#mappings#smart_close_popup()."\<C-h>"