vim에서 조건부 검색 및 바꾸기?

vim에서 조건부 검색 및 바꾸기?

한 줄에 주석을 달고 주석을 해제하고 싶다고 가정해 보겠습니다.

나도 할 수 있다는 걸 알아

:s!^!//!

그런 다음

:s!^//!!

이제 이것을 선으로 사용하고 싶다면 어떻게 해야 할까요?

원래,만약에줄은 다음으로 시작 //하고 삭제합니다.기타추가하세요.

이 명령을 두 개가 아닌 하나의 바로가기에 매핑하고 싶습니다.

답변1

나는 이것이 직접적으로 이루어질 수 없다고 확신합니다. 그러나 나는 당신을 위해 기능을 생각해 냈습니다. 이것을 당신의 ~/.vimrc:

function! Toggle()
    s!^\(\s*/\?[^/\s]/\?\)!xxx//\1!e
    s!^\(\s*\)//!\1!e
    s!^xxx//!//!e
endfunc

(이렇게 하면 xxx//이미 줄의 시작 부분에 있는 내용이 변경 되지만 //이런 일이 거의 발생하지 않는 것 같습니다.) 언제든지 를 사용하여 호출할 수 있지만 :call Toggle()키/조합에 매핑하는 것이 더 편리할 수 있습니다. 아래에서는 이를 Ctrl+ 에 매핑합니다 /. 물론 원하는 키 조합으로 대체할 수 있습니다(다른 조합으로 매핑하는 데 도움이 필요한지 묻습니다). 또한 이것을 다음 항목에 넣으십시오 ~.vimrc.

nnoremap <C-/> :call Toggle()<CR>
vnoremap <C-/> :call Toggle()<CR>
inoremap <C-/> <Esc>:call Toggle()<CR>i

Ctrl+ 는 각각 /일반, 시각적 및 삽입 모드의 기능에 매핑됩니다. 삽입 매핑은 삽입 모드로 돌아가지만 커서는 줄의 시작 부분으로 이동합니다. 일반 패턴을 유지하려면 i줄 끝에서 제거 하면 됩니다 inoremap.

(공백을 처리하도록 업데이트되었습니다. //공백을 제거한 후 항상 줄의 시작 부분에 삽입합니다)

관련 정보