행에 ToDo 그룹 (ToDo, FIXME ...)이있을 때마다 부호 열에 표시 될 부호를 추가 할 수 있습니까?
내 색 구성표를 조정하여 Todo 그룹의 강조 표시를 변경했지만 Syntastic 오류 및 경고와 같은 표시 열에 표시기를 원합니다.
행에 ToDo 그룹 (ToDo, FIXME ...)이있을 때마다 부호 열에 표시 될 부호를 추가 할 수 있습니까?
내 색 구성표를 조정하여 Todo 그룹의 강조 표시를 변경했지만 Syntastic 오류 및 경고와 같은 표시 열에 표시기를 원합니다.
답변:
이 기능을 사용해보십시오 :
function! SignKeyword()
silent! sign undefine todo
sign define todo text=>> texthl=Search
g/\v\C(<TODO>|<FIXME>)/execute "sign place 9999 line=" . line('.')
\ . " name=todo buffer=" . bufnr('')
nohlsearch
endfunction
이제 명령 행에서 함수를 호출하십시오.
:call SignKeyword()
또는 ~/.vimrc
전화를 걸기 위해 매핑을 추가 하십시오.
nnoremap <your mapping> :call SignKeyword()<cr>
또는 autocmd를 추가하십시오. 예를 들어 파일 형식이 markdown 인 파일을 열 때 함수가 자동으로 호출되도록하려면 다음을 수행하십시오.
autocmd FileType markdown call SignKeyword()
함수의 첫 번째 행은 silent! sign undefine todo
부호 할 일이 이미있는 경우이를 삭제하여 행을 삭제하거나 추가 한 후 부호가 잘못 배치 된 경우 함수를 호출하여 즉시 수정할 수 있습니다.
두 번째 줄은 이름이 todo이고 텍스트가 기호 (기호 >>
에 맞게 변경할 수 있음)와 검색 강조 그룹 (같은 항목)을 사용 하는 부호를 정의합니다 .
세 번째 줄은 전역 명령을 사용합니다.
:g/pattern/command
전역 명령은 패턴과 일치하는 모든 행에서 명령을 실행합니다.
여기서 패턴은 TODO 또는 FIXME\v\C(<TODO>|<FIXME>)
단어를 포함하는 모든 행을 의미합니다 .
정규식에는 원자가 포함되어있어 검색이 대소 문자를 존중합니다 ( '무시'옵션이 무엇이든 관계없이). 검색에서 대소 문자를 구분하지 않으려면로 변경하십시오 .\C
\c
이러한 행을 찾을 때마다 다음 행이 함수에 의해 실행됩니다.
execute "sign place 9999 line=" . line('.')
\ . " name=todo buffer=" . bufnr('')
:execute
다음 문자열의 내용을 명령으로 실행 합니다.
"sign place 9999 line=" . line('.') . " name=todo buffer=" . bufnr('')
: 문자열이 내장 함수 정력 포함 line()
와 bufnr()
.
line('.')
전역 명령으로 일치하는 항목이 발견되면 현재 행 bufnr('.')
의 번호를 리턴하고 현재 버퍼의 번호를 리턴합니다.
예를 들어, 전역 명령이 버퍼 5의 10 행에서 일치하는 것을 찾으면 다음을 제공합니다.
"sign place 9999 line=" . 10 . " name=todo buffer=" . 5
점은 문자열을 연결하므로 최종적으로 다음과 같이 평가됩니다.
"sign place 9999 line=10 name=todo buffer=5"
다음은 :sign
버퍼 5의 10 행에 부호를 배치하는 명령입니다.
9999는 부호에 대해 선택된 임의의 ID입니다 (다른 ID를 선택할 수 있음).
함수의 네 번째 줄은 :nohlsearch
일치하는 패턴의 강조 표시를 비활성화합니다.
편집 : 정규식을 수정했습니다. 원본이 잘못되었습니다. 나는 썼다. ^[TODO|FIXME]
그러나 나는 그것이 있어야한다고 생각한다 \v\C(<TODO>|<FIXME>)
. 불편을 드려 죄송합니다. 여전히 vimscript를 배우고 있습니다.
silent! sign undefine todo
. TODO 또는 FIXME 키워드가 포함 된 행을 삭제 한 후 부호가 잘못 배치 된 경우이를 수행하여 부호를 즉시 수정할 수 있습니다.
^[TODO|FIXME]
되었으므로 입력 했지만 대신 있어야했습니다 \v(TODO|FIXME)
. 새로운 정규 표현식은 키워드 중 하나가 포함 된 줄과 일치하지만 줄의 시작 부분과 일치하지 않습니다. 왜냐하면 줄에 주석과 같은 코드가 포함될 수 있다고 가정하기 때문 some code # FIXME this line needs to be fixed
입니다. 이전 정규 표현식은 완전히 잘못되었습니다. 불편을 끼쳐 드려 죄송합니다. 여전히 vimscript를 배우고 있습니다.
내 DynamicSigns 플러그인을 사용할 수 있습니다 . 이렇게하면 접는 식과 비슷한 "SignExpression"이 가능합니다.
그래서 당신은 단순히 할 수 있습니다 :SignExpression getline(v:lnum)=~'TODO'?'Warning':0
가능한 것에 대한 더 많은 예를 보려면 도움말을 읽으십시오.
플러그인 사용의 장점은 버퍼의 변경 사항을 추적하고 그에 따라 표시를 조정한다는 것입니다.
TODO
주석이 제거 된 후 기호를 제거하는 방법 은 무엇입니까?