2011-10-31 8 views
26

W vim można użyć f, a następnie znaku, aby przejść do następnego wystąpienia tej postaci w bieżącym wierszu. Na przykład, jeśli mam następujące (pozycja kursora oznaczone |):Jak przejść do kolejnej wielkiej litery?

m|akeBinExprNode = undefined 

mogę używać fB aby przejść do B i dtE usunąć dopiero przed E, zostawiając mnie z:

make|ExprNode = undefined 

Zastanawiam się, czy istnieje sposób, aby to zrobić, który nie wymaga wpisywania dokładnego znaku, tzn. Jakiegoś ruchu, który oznacza "przejdź do następnej wielkiej litery" i/lub "przejdź na prawo przed następną wielką literą".

+1

Poszukujesz rozwiązania do nawigacji w camelCase w swoim kodzie? Bo jeśli tak, to może jest miejsce na coś bardziej doświadczonego niż moja prosta odpowiedź ... – wilhelmtell

+3

Prawdopodobnie znajdziesz [this] (http://www.vim.org/scripts/script.php?script_id=1905) skrypt interesujący. Działa z CamelCase oraz snake_case. –

+0

@wilhelmtell Hmm, tak, fantazyjny sposób poruszania się między garbami camelCase byłby miły. –

Odpowiedz

4

Znalazłem vim tip for moving within CamelCaseWords, które mogą być użyteczne:

" 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> 

Następnie w trybie normalnym <leader>C (który domyślnie oznacza \C)

+0

Wierzę, że twoje rozwiązanie ma kilka efektów ubocznych. Jak wyłączanie podświetlania na całym świecie. – Tarrasch

6

wilhelmtell's odpowiedź będzie działać, chyba 'ignorecase' parametr jest ustawiony. Jeśli aktywowano 'smartcase' lub 'noignorecase', to jest to w porządku.

Jednak wzorem, który może zastąpić [A-Z] jest \u (patrz :help /\u lub więcej globalnie :help pattern). Dlatego można zastąpić mapowanie z:

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

chciałbym polecić następujący skrypt: camelcasemotion. To pozwala skakać, usuwać wewnętrzne "słowa wielbłąda", używając , + normalnej nawigacji [w, b, e] itd ...

+1

To rozszerzenie działa bardzo dobrze. Powinieneś wspomnieć, że musisz również zainstalować [VimBall] (http://www.vim.org/scripts/script.php?script_id=1502), aby go zainstalować. –

9

Kiedy szukałem tego, chętnie bym po prostu " rodzime "rozwiązanie: po prostu wejdź w tryb poleceń:

/\u 

co oznacza" szukaj dużej litery ". Następnie przesuń się między wielkimi literami z n i N (shift + n).

+0

To jest niesamowite! Nagrywam najseksowniejsze makra, które zamieniają wielbłąski przypadek w skrzynkę węża i tekst oddzielony spacjami. Nie potrzeba wtyczek ani zmian w vimrc. Niestety nie działa z poleceniem F. – toftis

Powiązane problemy