当我使用vim时,当我按w或b前进或后退时,我通常不想移动到标点符号.所以我想知道是否有设置或改变此功能的东西?
例如,如果我有一些像这样的代码
的object.method(参数)
和我的光标是在[O]中的"对象",则我想瓦特移动到[米]中的"方法",以及另一瓦特到[A]中的"参数" msgid移动到.我不希望它落在[.]或[(]上.如果我想要移动到标点符号,我总是用f或F直接跳到它.我从未亲自当我通过单词时,我想转移到标点符号,我才意识到这真的让我烦恼.
我也发现我想要一个更具包容性的运动w
,但不像W
. 特别是,我想要一个仅将以字母数字字符开头的标记视为重要的运动。
所以我想出了以下内容:
" <SPACE> : forward to next word beginning with alphanumeric char
" <S-SPACE> : backward to prev word beginning with alphanumeric char
" <C-SPACE> : same as above (as <S-SPACE> not available in console Vim
" <BS> : back to prev word ending with alphanumeric char
function! <SID>GotoPattern(pattern, dir) range
let g:_saved_search_reg = @/
let l:flags = "We"
if a:dir == "b"
let l:flags .= "b"
endif
for i in range(v:count1)
call search(a:pattern, l:flags)
endfor
let @/ = g:_saved_search_reg
endfunction
nnoremap <silent> <SPACE> :<C-U>call <SID>GotoPattern('\(^\\|\<\)[A-Za-z0-9_]', 'f')<CR>
vnoremap <silent> <SPACE> :<C-U>let g:_saved_search_reg=@/<CR>gv/\(^\\|\<\)[A-Za-z0-9_]<CR>:<C-U>let @/=g:_saved_search_reg<CR>gv
nnoremap <silent> <S-SPACE> :<C-U>call <SID>GotoPattern('\(^\\|\<\)[A-Za-z0-9_]', 'b')<CR>
vnoremap <silent> <S-SPACE> :<C-U>let g:_saved_search_reg=@/<CR>gv?\(^\\|\<\)[A-Za-z0-9_]<CR>:<C-U>let @/=g:_saved_search_reg<CR>gv
nnoremap <silent> <BS> :call <SID>GotoPattern('[A-Za-z0-9_]\(\>\\|$\)', 'b')<CR>
vnoremap <silent> <BS> :<C-U>let g:_saved_search_reg=@/<CR>gv?[A-Za-z0-9_]\(\>\\|$\)<CR>:<C-U>let @/=g:_saved_search_reg<CR>gv
" Redundant mapping of <C-SPACE> to <S-SPACE> so that
" above mappings are available in console Vim.
"noremap <C-@> <C-B>
if has("gui_running")
map <silent> <C-Space> <S-SPACE>
else
if has("unix")
map <Nul> <S-SPACE>
else
map <C-@> <S-SPACE>
endif
endif
Run Code Online (Sandbox Code Playgroud)
我有这个现在很长一段时间,我发现我使用<SPACE>
/<C-SPACE>
运动这么远不止w
和W
; 它在编码时似乎更有用。当然,您可以将命令映射到您认为有用或更合适的任何键。