denite의 grep에게 VisualMode의 힘을 줘
8188 단어 neovimdenite.nvimVim
denite.nvim이란?
fzf라든지의 파인더 같은 녀석입니다.
다양한 조작의 인터페이스를 제공, 확장이 가능하게 되어 있어,
뭐든지 바꿀 수 있는 흑마술을 닮은 뭔가라고 생각하고 있습니다.
grep을 보다 편리하게
gif 내에서 grep의 데모하고 있지만,
이번에는 Visual 모드에서 선택한 문자열을 denite로 grep 할 수 있습니다.
선택 문자열을 얻고 denite
구글 선생님에게 물어 보면
h tps : // s c ゔ ぇ rf ぉ w. 코 m / 쿠에 s 치온 s / 1533565 / HO W-Toge t- ぃ
를 찾았습니다.
getline("'<")[getpos("'<")[2] - 1:getpos("'>")[2] - 1]
우선, 함수화합니다.
function! g:GetVisualWord() abort
let word = getline("'<")[getpos("'<")[2] - 1:getpos("'>")[2] - 1]
return word
endfunction
Visual 모드일 때만 실행하고 싶으므로 매핑
xnoremap <silent> <SPACE>fg :Denite grep:::`GetVisualWord()`<CR>
" Space file grepって感じのマッピング
다만, 메타 문자라든지 들어가면, 올바른 grep 되지 않습니다. (grep 개인차에 따릅니다)
필요한 것 같은 편의 문자를 이스케이프 하는 함수를 새롭게 작성.
function! g:GetVisualWordEscape() abort
let word = substitute(GetVisualWord(), '\\', '\\\\', 'g')
let word = substitute(word, '[.?*+^$|()[\]]', '\\\0', 'g')
return word
endfunction
xnoremap <silent> <SPACE>fg :Denite grep:::`GetVisualWordEscape()`<CR>
" エスケープバージョンに変更
이제 이렇게 됩니다.
Dente file
의 grep과 get(g
의 grep이 있습니다!복사하고 페어 검색하는 번거로움이 없어져 편해졌습니다!
대단히 처리를 확인
예를 들어
aiueo
문자열이 있고 iue
를 선택한 상태라고 가정합니다.01234 " 添字
12345 " 列番号
aiueo " 文字
< > " 選択文字: iue
하나씩 처리 결과를 살펴 보겠습니다.
" 1.選択している行の文字列を取得
getline("'<")
" Output: aiueo
" 2.選択文字列の初めの文字位置を取得
getpos("'<")[2]
" Output: 2
" 3.選択文字列の最後の文字位置を取得
getpos("'>")[2]
" Output: 4
" 4.開始位置と終了位置の添字を取得
getpos("'<")[2] - 1
" Output: 1
getpos("'>")[2] - 1
" Output: 3
" 5.上記を合わせて、選択文字を取得
" getline("'<")[1:3]
getline("'<")[getpos("'<")[2] - 1:getpos("'>")[2] - 1]
" Output: iue
포인트 부분 확인
'< 및 '>
'<
는 마지막으로 선택한 첫 번째 행과 문자를 의미합니다.반대로
'>
는 마지막으로 선택한 마지막 행과 문자를 의미합니다.어딘가를 선택한 다음 일반 모드에서
'<
실행하면 선택한 첫 번째 행으로 날아갑니다.getpos
즉,
getline("'<")
는, 최초의 선택행의 캐릭터 라인을 출력하고 있습니다.getpos
는 [bufnum, lnum, col, off]
의 목록을 반환합니다.시작 문자의 위치를 알고 싶기 때문에
col
의 2 번째가 필요하므로 [2]
입니다.Denite grep
Denite grep:0:1:2
는 위치에 따라 각각 의미가 있습니다. ( :h denite-source-grep
에서 자세히 알아보기)0
는 지정된 경로에서 grep 1
는 지정된 grep 옵션으로 실행 2
는 지정된 문자열로 grep 라는 역할이 있으므로
Denite grep:::grep-word
라는 느낌으로 사용합니다.사이고에게
선택 문자열을 grep이라는 직관적인 조작이 되었습니다.
이 선택 문자 취득 방법이라면, 멀티 바이트 대응하고 있지 않으므로, 향후 개량하고 싶네요 (이미 있을까? 알고 있으면 가르쳐 주세요!!)
denite.nvim은 매우 편리합니다!
핵심 부분은 Python으로 작성되었으므로 확장도 Python으로 할 수 있습니다! (디자브)
필자는, Vim 어드벤트 캘린더 12일에도 참가하고 있어(단지의 프로모션), Git의 차분 관계(브랜치간의 커밋 로그 일람표시, 브랜치간 파일 일람표시, 차분 확인)를 조작할 수 있는 denite 확장 플러그인을 소개할 예정이므로 흥미있는 분은 꼭 체크 부탁드립니다.
Reference
이 문제에 관하여(denite의 grep에게 VisualMode의 힘을 줘), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/aratana_tamutomo/items/e36fb724c604bdd19756텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)