변수 / 레지스터를 올바르게 vim-escape하는 방법


5

예를 들어 현재 yank 레지스터의 발생을 강조하고 싶습니다.

:let @/=@"

@"백 슬래시처럼 '재미있는'것이 없으면 작동 합니다.

내가 할 수있는

:let @/=escape(@", '\\')

그러나 이것이 옳은 일인지 확실하지 않으며 가능한 모든 문제가있는 인물을 피할 수 있는지 확실하지 않습니다 . 다른 사람이있을 수 있습니다.

업데이트 : 좋아, 더 많은 것을 피해야합니다. 모든 리젠트 특수 문자는 적어도 보인다. 그렇다면 정규 표현식 이스케이프 함수 또는 모든 정규 표현식 특수 문자를 나열하는 변수가 있습니까?

답변:


4

나는 그런 목록이 없다고 생각합니다. 다음은 현재 선택된 문자열을 검색하기 위해 매크로의 일부로 꽤 오랫동안 사용했던 이스케이프 함수입니다.

escape(@", '\\/.*$^~[]')

편집하다:

원래 답변에 ~ / .vimrc에서 너무 많이 복사했기 때문에 추가 인수가있었습니다. 다음은 해당 컨텍스트가 도움이 될 수있는 경우 이스케이프를 사용한 매핑입니다. 일부 텍스트를 강조 표시하고 입력 *하면 다음에 해당 텍스트가 검색됩니다. (원래 Jürgen Krämer가 작성했습니다.)


vnoremap <silent> * :<C-U>
          \let old_reg=getreg('"')<bar>
          \let old_regmode=getregtype('"')<cr>
          \gvy/<C-R><C-R>=substitute(
          \escape(@", '\\/.*$^~[]'), '\n', '\\n', 'g')<cr><cr>
          \:call setreg('"', old_reg, old_regmode)<cr>


흠. 당신은 타의 추종을 불허 가지고있는 것처럼) 보이는
비탈리 커쉬너
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.