通常使用camelCase或snake_case来分隔构成标识符的多个单词。如果“单词”运动(b,w,e)能够检测到这些内部标识符边界,那就太好了。

如何实现这种行为? (插件/ vimrc / ...?)

评论

我也想知道关于snake_case

您也许可以使用iskeyword设置来做一些事情,但是我担心这会有很多其他的副作用...(请参阅:help word)。

@Carpetsmoker我认为它适用于snake_case。似乎没有,将其包含在问题中。

VimWiki可以满足您的需求:vim.wikia.com/wiki/Moving_through_camel_case_words如果有人不反对我,我会在某个时候写下正确的答案。

我个人认为一个全称的单词是一个整体单词,不喜欢因为大小写或下划线而将单词分成一半的想法。通常,我使用f和t键来管理内部单词的移动。

#1 楼

插件CamelCaseMotion可以满足您的需求。默认情况下,它映射到键,w,b,e,它们等效于普通wbe。它适用于CamelCase和snake_case:

示例:

camelCaseWord


使用d,w将删除camel;再次使用它将删除Case

,或者使用蛇皮套:

snake_case_word


d,w将删除snake_,第二次将其删除case_

“内部”运动(例如diw)也应能按预期工作(如di,w)。以及带有以下内容的w

map <silent> w <Plug>CamelCaseMotion_w
map <silent> b <Plug>CamelCaseMotion_b
map <silent> e <Plug>CamelCaseMotion_e
sunmap w
sunmap b
sunmap e
omap <silent> iw <Plug>CamelCaseMotion_iw
xmap <silent> iw <Plug>CamelCaseMotion_iw
omap <silent> ib <Plug>CamelCaseMotion_ib
xmap <silent> ib <Plug>CamelCaseMotion_ib
omap <silent> ie <Plug>CamelCaseMotion_ie
xmap <silent> ie <Plug>CamelCaseMotion_ie


评论


请注意,此插件的默认映射遮住了,命令(重复最后的f / t / F / T运动),这意味着如果要使用该命令,则必须等待延迟(由“ timeoutlen”配置)。幸运的是,该插件允许您使用所选的替代映射。

–tommcdo
2015年2月10日在22:44

这个插件似乎有一些副作用,即:dw on,key);当光标位于k时似乎会删除整行(包括换行符),而我希望仅删除键...

–马丁·图尔诺伊(Martin Tournoij)
2015年2月11日下午0:36

我发现这个插件更好。将运动与删除结合起来可以正常工作,并且它也停在方括号中。

– Paschalis
16年5月5日14:30



次要点,但在第一个示例中,它一定会删除骆驼,然后再删除Case,而不是Word?

– preferred_anon
19年1月17日在10:16