2011-10-31 22 views
26

在vim中,我可以使用f後跟一個字符來轉到當前行上該字符的下一個出現位置。舉例來說,如果我有以下的(光標位置標有|):如何移至下一個大寫字母?

m|akeBinExprNode = undefined 

我可以用fB移動到BdtE刪除,直到E之前,留給我:

make|ExprNode = undefined 

我不知道是否有辦法做到這一點,不涉及輸入確切的字符,即某種形式的動作,意味着「去下一個大寫字母」和/或「在下一個大寫字母之前去右邊」。

+1

您是否正在尋找代碼中的camelCase導航解決方案?因爲如果是這樣,那麼也許有空間比我的簡單答案更有趣...... – wilhelmtell

+3

您可能會發現[this](http://www.vim.org/scripts/script.php?script_id=1905)劇本有趣。它可以和CamelCase以及snake_case一起使用。 –

+0

@wilhelmtell嗯,是的,在camelCase駝峯之間移動的一種奇特的方式會很好。 –

回答

4

我發現這個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 
5
:nmap <leader>C /[A-Z]<CR>:nohlsearch<CR> 

然後以正常模式<leader>C(默認情況下是指\C

+0

我相信你的解決方案有一些副作用。就像關閉全球的突出顯示一樣。 – Tarrasch

6

wilhelmtell's答案將工作,除非'ignorecase'參數設置。如果'smartcase'被激活或'noignorecase'那麼它就沒關係。

然而,可替換[A-Z]圖案是\u(見:help /\u或多個全球:help pattern)。因此,您可以將您的映射替換爲:

:nnoremap <leader>C /\u<CR>:nohlsearch<CR> 
14

我會推薦以下腳本:camelcasemotion。它允許你跳轉,刪除內部'駱駝案詞',使用, +正常導航[w,b,e]等...

+1

此擴展工作得很好。應該提到你還需要安裝[VimBall](http://www.vim.org/scripts/script.php?script_id=1502)來安裝它。 –

9

當我搜索,我會很高興只是有「原生「解決方案:只需輸入命令模式:

/\u 

它代表」搜索大寫字母「。之後,只需在大寫字母nN(shift + n)之間移動。

+0

這太棒了!我正在錄製最性感的宏,將駱駝案變成蛇案和空間分離的文本。無需插件或vimrc更改。不幸的是它不適用於F-命令。 – toftis

相關問題