在vim中,我可以使用f
後跟一個字符來轉到當前行上該字符的下一個出現位置。舉例來說,如果我有以下的(光標位置標有|
):如何移至下一個大寫字母?
m|akeBinExprNode = undefined
我可以用fB
移動到B
和dtE
刪除,直到E
之前,留給我:
make|ExprNode = undefined
我不知道是否有辦法做到這一點,不涉及輸入確切的字符,即某種形式的動作,意味着「去下一個大寫字母」和/或「在下一個大寫字母之前去右邊」。
在vim中,我可以使用f
後跟一個字符來轉到當前行上該字符的下一個出現位置。舉例來說,如果我有以下的(光標位置標有|
):如何移至下一個大寫字母?
m|akeBinExprNode = undefined
我可以用fB
移動到B
和dtE
刪除,直到E
之前,留給我:
make|ExprNode = undefined
我不知道是否有辦法做到這一點,不涉及輸入確切的字符,即某種形式的動作,意味着「去下一個大寫字母」和/或「在下一個大寫字母之前去右邊」。
我發現這個vim tip for moving within 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
:nmap <leader>C /[A-Z]<CR>:nohlsearch<CR>
然後以正常模式<leader>C
(默認情況下是指\C
)
我相信你的解決方案有一些副作用。就像關閉全球的突出顯示一樣。 – Tarrasch
wilhelmtell's答案將工作,除非'ignorecase'
參數設置。如果'smartcase'
被激活或'noignorecase'
那麼它就沒關係。
然而,可替換[A-Z]
圖案是\u
(見:help /\u
或多個全球:help pattern
)。因此,您可以將您的映射替換爲:
:nnoremap <leader>C /\u<CR>:nohlsearch<CR>
我會推薦以下腳本:camelcasemotion。它允許你跳轉,刪除內部'駱駝案詞',使用, +正常導航[w,b,e]等...
此擴展工作得很好。應該提到你還需要安裝[VimBall](http://www.vim.org/scripts/script.php?script_id=1502)來安裝它。 –
當我搜索,我會很高興只是有「原生「解決方案:只需輸入命令模式:
/\u
它代表」搜索大寫字母「。之後,只需在大寫字母n
和N
(shift + n)之間移動。
這太棒了!我正在錄製最性感的宏,將駱駝案變成蛇案和空間分離的文本。無需插件或vimrc更改。不幸的是它不適用於F-命令。 – toftis
您是否正在尋找代碼中的camelCase導航解決方案?因爲如果是這樣,那麼也許有空間比我的簡單答案更有趣...... – wilhelmtell
您可能會發現[this](http://www.vim.org/scripts/script.php?script_id=1905)劇本有趣。它可以和CamelCase以及snake_case一起使用。 –
@wilhelmtell嗯,是的,在camelCase駝峯之間移動的一種奇特的方式會很好。 –