我如何转到下一个大写字母?

R. *_*des 34 vim

在vim中,我可以使用f后跟一个字符来转到当前行上该字符的下一个匹配项.例如,如果我有以下(光标位置标记|):

m|akeBinExprNode = undefined
Run Code Online (Sandbox Code Playgroud)

我可以使用fB移动到BdtE删除,直到前E,留给我:

make|ExprNode = undefined
Run Code Online (Sandbox Code Playgroud)

我想知道是否有办法做到这一点,不涉及输入确切的字符,即某种动作,意思是"转到下一个大写字母"和/或"在下一个大写字母前右转".

Ant*_*hev 26

当我搜索到它时,我很乐意拥有"原生"解决方案:只需进入命令模式:

/\u
Run Code Online (Sandbox Code Playgroud)

它代表"搜索大写字母".之后只需在大写字母nN(shift + n)之间移动.

  • 这太棒了!我正在录制最性感的宏,将驼峰式字母转换为蛇形字母格和空格分隔的文本。无需插件或 vimrc 更改。不幸的是,它不适用于 F 命令。 (2认同)
  • vim 确实有办法用最简单、最明显的方法来解决问题,让你觉得自己很愚蠢。@JoyceBabu 尝试“dn”。我正在使用 `cn<whatever>` 来更改一些内容(这允许您使用 `.` 来重复更改) (2认同)
  • @NathanChappell 感谢您的回复。但这不需要先运行 `/\u` 吗?考虑以下文本“Aaa|aaaCccc”。如果我运行“/\u”,我已经在“C”了。所以现在我需要向后删除。我错过了什么? (2认同)
  • @NathanChappell 这很有用。谢谢。 (2认同)
  • @JoyceBabu 你也可以只输入“d/\u”。即使您使用 / 搜索其他内容,当使用“.”时,您也会再次覆盖搜索词。[此处](/sf/answers/602158441/)提出了与您的问题非常接近的问题 (2认同)

mb1*_*b14 14

我建议使用以下脚本:camelcasemotion.它允许你跳跃,删除内部'骆驼案例词',使用,+普通导航[w,b,e]等...

  • 这个扩展很好用。应该提到你还需要安装 [VimBall](http://www.vim.org/scripts/script.php?script_id=1502) 来安装它。 (2认同)

sou*_*rge 7

我发现这个vim提示可以在CamelCaseWords移动,这可能很有用:

" Use one of the following to define the camel characters.
" Stop on capital letters.
let g:camelchar = "A-Z"
" Also stop on numbers.
let g:camelchar = "A-Z0-9"
" Include '.' for class member, ',' for separator, ';' end-statement,
" and <[< bracket starts and "'` quotes.
let g:camelchar = "A-Z0-9.,;:{([`'\""
nnoremap <silent><C-Left> :<C-u>call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%^','bW')<CR>
nnoremap <silent><C-Right> :<C-u>call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%$','W')<CR>
inoremap <silent><C-Left> <C-o>:call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%^','bW')<CR>
inoremap <silent><C-Right> <C-o>:call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%$','W')<CR>
vnoremap <silent><C-Left> :<C-U>call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%^','bW')<CR>v`>o
vnoremap <silent><C-Right> <Esc>`>:<C-U>call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%$','W')<CR>v`<o
Run Code Online (Sandbox Code Playgroud)


Ben*_*oit 7

除非'ignorecase'参数设置,否则wilhelmtell的答案将起作用.如果'smartcase'被激活或者'noignorecase'它没有问题.

然而,可以取代的模式[A-Z]\u(参见:help /\u或更全面:help pattern).因此,您可以用以下内容替换映射:

:nnoremap <leader>C /\u<CR>:nohlsearch<CR>
Run Code Online (Sandbox Code Playgroud)


wil*_*ell 5

:nmap <leader>C /[A-Z]<CR>:nohlsearch<CR>
Run Code Online (Sandbox Code Playgroud)

然后在正常模式下<leader>C(默认情况下\C)