设置为在向前和向后移动单词时跳过标点符号

Tub*_*Tub 5 vim

当我使用vim时,当我按wb前进或后退时,我通常不想移动到标点符号.所以我想知道是否有设置或改变此功能的东西?

例如,如果我有一些像这样的代码

的object.method(参数)

和我的光标是在[O]中的"对象",则我想瓦特移动到[米]中的"方法",以及另一瓦特到[A]中的"参数" msgid移动到.我不希望它落在[.]或[(]上.如果我想要移动到标点符号,我总是用fF直接跳到它.我从未亲自当我通过单词时,我想转移到标点符号,我才意识到这真的让我烦恼.

Jee*_*eet 5

我也发现我想要一个更具包容性的运动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>运动这么远不止wW; 它在编码时似乎更有用。当然,您可以将命令映射到您认为有用或更合适的任何键。