[vim] Vim에서 사례 보존 대용품
Vim 에서이 작업을 수행 할 수 있습니까 ?
내 말은 ‘BadJob’을 검색하고 ‘GoodJob’으로 바꾸면 다음과 같은 대체 작업을 수행합니다.
'badjob' -> 'goodjob' 'BadJob' -> 'GoodJob' 'badJob' -> 'goodJob' 'BADJOB' -> 'GOODJOB'
답변
abolish.vim을 사용하십시오 .
:%S/badjob/goodjob/g
답변
이것이 당신이 찾고있는 해결책인지 모르겠지만 … 이것을 사용했습니다 :
keepcase.vim
vim에서는 달리 지원하지 않습니다 …
답변
확실히 너는 할 수있어
:s/\cbad/\= strpart(submatch(0), 0 ,1) == toupper(strpart(submatch(0), 0, 1)) ? "GOOD" : "good"/
추신. keepcase.vim이 비슷한 논리를 캡슐화한다고 생각합니다. 🙂
답변
당신은 이것을 붙여 넣고 적응시킬 수 있습니다 :
(물론, 때때로 이것을하는 경우이 괴물 대신 플러그인을 원할 것입니다.) 서두르고 한 번만 필요한 사람에게는 빠른 해킹입니다. 붙여 넣기의 즐거움을 위해 🙂
:%s/\cbad\zejob/\= ( submatch(0)[0] is# toupper(submatch(0)[0]) ? 'G' : 'g' ) . ( submatch(0)[1] is# toupper(submatch(0)[1]) ? 'OOD' : 'ood' )
검색 패턴 외에도 교체 코드에서 네 개의 '
문자열 '
을 편집해야합니다. 굵게 표시된 부분을 편집하십시오 .
: % s / \ c 잘못된 \ ze 작업 / \ =
(submatch (0) [0] is # toupper (submatch (0) [0])? ‘ G ‘: ‘ g ‘).
(submatch (0) [1] is # toupper (submatch (0) [1])? ‘ OOD ‘: ‘ ood ‘)
줄 바꿈 문자도 명령을 위반하므로 붙여 넣기에이 ‘주황색’버전을 사용하지 마십시오.
/\ze
는 긍정적 인 예측을 표시하기위한 vim regex 구문 설탕이다 : 이후 패턴 \ze
이 점검되지만 대체되지는 않는다.
is#
?? 설명하겠습니다… (관심이 있다면)
#
( ==#
및 기타 )도 대소 문자를 구분합니다. 그렇지 않으면 with :set ignorecase
(유용한 것이 필요하기 때문에 내가 사용하는 :set smartcase
), vim은 'a' == 'A'
!!
미친 듯이, 우리는 그것을 정말로 고려해야합니다 : 그것은 사용자 설정에 의존하기 때문에 ==
NEVAR을 사용해야합니다! (실제로 원하는 위치를 제외하고) ==#
정수를 비교할 때 사용하는 권장 사항도 따르겠습니다 . http://learnvimscriptthehardway.stevelosh.com/chapters/22.html#code-defensively
is#
대신 ==#
방어 적으로 코딩하는 또 다른 방법입니다. 형식 안전성을 향상시킵니다. http://google.github.io/styleguide/vimscriptguide.xml?showone=Type_checking#Type_checking
문자열 리터럴과 비교할 때 사용해야합니다.
'single-quoted'
"double quoted"
문자열 대신 다른 좋은 방법이 있습니다 : http://google.github.io/styleguide/vimscriptguide.xml?showone=Strings#Strings
HT @fc. -이 대답은 자신을 기반으로 답변을 몇 가지 단점을 고정.
답변
대소 문자를 정확히 사용하여 대소 문자를 구분하지 않는 정확한 문자열 만 일치시키는 경우 다른 가능성은 다음과 같습니다.
:s/abc/\={'abc':'xyz','Abc':'Xyz'}[submatch(0)]/i