2013-08-30 2 views
7

거의 항상 Vim에서 /으로 검색 한 다음 n으로 앞으로 검색하고 N으로 뒤로 검색합니다. 그러나 때로는 ?을 사용하여 현재 내가있는 행 위의 몇 줄로 건너 뛰고 동일한 항목 전달을 검색하려면 n 대신 N을 사용해야합니다. 짜증나는 정신 스피드 충돌.'/ n'이/또는? 검색에 사용되었습니다

내 질문은 : 은 항상 앞으로 가고, N은 거꾸로 만들 수 있습니까?

P. 설명서는 n이 단순히 "최신"/ "또는"[횟수] "를 반복하기 때문에 가능하지 않다는 것을 알지만 누가 알 수 있습니다.

:noremap n /<CR> 
:noremap N ?<CR> 

관련 메일 링리스트 스레드를 많은 : 개발자의 메일 링리스트에 어떤 토론에도 불구하고, 그것은 단지 방법입니다

답변

9

이것은 vim 메일 링리스트의 ZyX's post에서 가져온 것입니다.

noremap <expr> n 'Nn'[v:searchforward] 
noremap <expr> N 'nN'[v:searchforward] 

이는 두 요소 목록으로 인덱싱 'Nn' 의해 가변 v:searchforward의 기반으로 원래 N 또는 N에 n 매핑한다. 이는 매핑이 비 재귀 적이기 때문에 작동합니다. 그것이 재귀 적이라면, 이것은 스스로 호출 할 것이고 당신은 무한 루프가 될 것입니다. v:searchforward == 1 (앞으로 검색) 매핑이

noremap <expr> n n 
noremap <expr> N N 

과 동등한

v:searchfoward == 0 (뒤로 검색) 매핑은

noremap <expr> n N 
noremap <expr> N n 
이 매핑 비주얼 정상, 작동

과 동등한 때 운영자 보류 모드.


아마도 이렇게 작성했을 것입니다. (비록 이것이 더 명확한 지 모르겠다.)

noremap <expr> n (v:searchforward ? 'n' : 'N') 
noremap <expr> N (v:searchforward ? 'N' : 'n') 
+0

와우, 독창적 인지도 하나입니다. – dorserg

+0

그건 그렇고,이 스레드가 튀어 나왔기 때문에 나는 새로운 솔루션을 가지고있다. "맞다.하지만 처음에는 내가 원했던 것이다. /패턴 으로 반복 할 수 있도록 d // e를 누른다. nnnn "불만. – ZyX

6

은 ...

여기

당신이 그것에 대해 무엇을 할 수 더 많은 흥미로운 정보 : https://groups.google.com/d/msg/vim_dev/8jSoA931P2Y/JklYtxFOiAYJ

+0

나는 '/ e' 플래그를 잃어버린 것처럼 보이지 않는다. – FDinoff

+0

아, 네 말이 맞아. 나는': s'와 혼동했고 충분히 테스트하지 않았다. 다른 문제가 있는지 궁금합니다. 해결책은 너무 단순 해 보입니다. – glts

+0

나는 스레드의 맨 아래에있는 Zyx의 대답을 좋아합니다. (그리고 처음에 게시하지 않았다면 그 변수를 찾을 수있는 곳)'noremap n 'N'[v : searchforward]'및 'noremap N 'n [v : searchforward]' – FDinoff

관련 문제