2013-03-08 3 views
1

내가 빔의 단어를 교환하기 위해 다음과 같은 매핑을 사용하려고 해요 :빔, 악센트 문자와 단어를 교환

" Swap current word with previous one (push word to the left) 
nnoremap <silent> <A-h> "_yiw?\k\+\_W\+\%#<CR>:s/\(\%#\k\+\)\(\_W\+\)\(\k\+\)/\3\2\1/<CR><c-o><cl>:noh<CR> 

" Swap current word with the next one (push word to the right) 
nnoremap <silent> <A-l> "_yiw:s/\(\%#\k\+\)\(\_W\+\)\(\k\+\)/\3\2\1/<CR><c-o>/\k\+\_W\+<CR><c-l>:noh<CR> 

나는 또한 내의 vimrc에있는 위의 다음

set [email protected],48-57,_,192-255,:,# 

파일 악센트 부호가있는 문자가 단어를 시작할 때를 제외하고는 매핑이 잘 작동합니다 (단어 밀기). 스페인어로 쓰기 때문에 악센트 부호가있는 문자가 자주 사용되므로 어떻게 정규 표현식을 변경하여이 문제를 해결할 수 있습니까?

experimentación 무자비한

지금의 :

내가 일반적으로 매크로를 선호

답변

1

문제는 \_W "일치하는 비 WORD 및 개행"아톰에 있습니다. Vim에서 WORD는 ASCII 문자로 제한되므로 악센트 부호가있는 문자가 여기에 일치하고 잘못된 경계가 생깁니다. 대신에 "비 키워드 및 개행"이 필요합니다. \K이 아니기 때문에 \k의 부정은이 아니므로 \%(\k\@!\_.\) "키워드가 아닌 모든 문자 (및 개행 문자)"를 사용해야합니다. 결과 맵핑은 다음과 같습니다.

nnoremap <silent> <A-h> "_yiw?\k\+\%(\k\@!\_.\)\+\%#<CR>:s/\(\%#\k\+\)\(\%(\k\@!\_.\)\+\)\(\k\+\)/\3\2\1/<CR><c-o><c-l>:noh<CR> 

nnoremap <silent> <A-l> "_yiw:s/\(\%#\k\+\)\(\%(\k\@!\_.\)\+\)\(\k\+\)/\3\2\1/<CR><c-o>/\k\+\%(\k\@!\_.\)\+<CR><c-l>:noh<CR> 
0

, 우리는 (네, 난 그냥 설명을 사용하고 어떤 이해가되지 않습니다) 다음과 같은 라인을 가지고 말할 수 vim 나는이 줄을 시작하고 q를 누른 다음 레코드 키 (영숫자 키)를 눌러 'l'을 말합니다. 다음 기록 내 행동 :

  1. 을 눌러 'DW'(단어가 공백으로 끝나는 w 자본과 가정)

  2. 전자와 단어의 끝 진행 단어를 절단하는

  3. 은에 페이지 ''에서

  4. 유형 ''A '

  5. 보도'를 눌러 공간을 추가 풀.

나는 그것의 너무 많은 문제를 처음 알고 있지만 당신이 그것을 저장 한 후에는 '@l', 'L'로 단어의 쌍을 불러올 수 있습니다 우리의 기록 키 위에서이다.

+0

필자는 원래의 게시물에서 정의한 매핑을 사용하고 싶습니다. 그럼 내가 어떻게 정규 표현식을 바꿀 수 있는지 알고 있니? – petobens

+0

죄송합니다, 나는 vim map을 구성하는데 많은 경험이 없습니다. – n3rV3

관련 문제