加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 21:45:11 所属栏目:安全 来源:网络整理
导读:当我使用 vim时,当我按w或b前进或后退时,我通常不想移动到标点符号.所以我想知道是否有设置或改变此功能的东西? 例如如果我有一些像这样的代码 object.method(args) 我的光标位于“对象”中的[o],然后我想要移动到“方法”中的[m],另一个移动到“args”中的
当我使用 vim时,当我按w或b前进或后退时,我通常不想移动到标点符号.所以我想知道是否有设置或改变此功能的东西?

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

object.method(args)

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

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读