微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

object.method(args)

我的光标位于“对象”中的[o],然后我想要移动到“方法”中的[m],另一个移动到“args”中的[a].我不希望它落在[.]或[(]上.如果我想要移动到标点符号,我总是用f或F直接跳到它.我从未亲自当我通过单词时,我想转移到标点符号,我才意识到这真的让我烦恼.

@H_404_2@

解决方法

我也发现我想要一个更具包容性的运动,但不像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

我已经有很长一段时间了,我发现我使用< SPACE> /< C-SPACE>运动比w和W多得多;它在编码时似乎更有用.当然,您可以将命令映射到您认为有用或更合适的任何键.

@H_404_2@ @H_404_2@
@H_404_2@
@H_404_2@

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐