답변:
abolish.vim을 사용하십시오 .
:%S/badjob/goodjob/g
BadJob
를로 바꾸고 싶다면을 GoodJob
사용할 수 없습니다 %S/badjob/goodjob/g
. 일치를 감지하지 못합니다.
%S/BadJob/GoodJob/g
. 그러면 Subvert 명령은 대소 문자 혼합 모드로 전환되고 OP에 의해 주어진 모든 Substition을 수행합니다.
이것이 당신이 찾고있는 해결책인지 모르겠지만 ... 이것을 사용했습니다 : keepcase.vim
vim에서는 달리 지원하지 않습니다 ...
확실히 너는 할 수있어
:s/\cbad/\= strpart(submatch(0), 0 ,1) == toupper(strpart(submatch(0), 0, 1)) ? "GOOD" : "good"/
추신. keepcase.vim이 비슷한 논리를 캡슐화한다고 생각합니다. :)
:set ignorecase
. 2. 대신에 Bad
로 대체됩니다 . 3. 질문 의 " "부분은 무시되므로 →로 대체 됩니다. 이 버그들에 대한 수정 및 설명과 제 대답 에는 몇 가지 다른 것들이 있습니다. (또한 LOLOWLs!)GOOD
Good
job
lambada
lamgooda
당신은 이것을 붙여 넣고 적응시킬 수 있습니다 :
(물론, 때때로 이것을하는 경우이 괴물 대신 플러그인을 원할 것입니다.) 서두르고 한 번만 필요한 사람에게는 빠른 해킹입니다. 붙여 넣기의 즐거움을 위해 :)
:%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. -이 대답은 자신을 기반으로 답변을 몇 가지 단점을 고정.
keepcase 플러그인 의 대안 은 원래 대소 문자를 유지하면서 단어를 바꾸는 SmartCase 입니다. (나쁜 평가로 자신을 낙담시키지 마십시오.)
:%s/file\A\?size/\=SmartCase("LastModifiedTime")/ig
있습니까?
:SmartCase
명령을 사용할 수 있습니다 . 나는 그것을 내 자신의 포크로 확장했습니다 . 이것은 ingo-library 를 종속성으로 필요 로합니다.