NeoVim을 터미널로 사용하기 위해 한 일
"모든 조작은 Vim 내에서 이루어져야 한다"는 철학 하에서 Vim을
gnome-terminal
대신에 상용하고 있습니다.오늘은 그 환경을 만들기 위해 한 일을 정리합니다.
내 init.vim은 여기에서 볼 수 있습니다 -> dotfiles-nvim/init.vim at master · acomagu/dotfiles-nvim
: 터미널에서 부모의 Vim을 조작 할 수있게합니다.
모처럼 Vim 내에서 단말기가 열리면 거기에서 파일을 열고 싶네요. (Vim을 중첩하고 싶지 않아요)
neovim-remote 의 차례입니다.
말하자면, Vim의 단말내에서
nvr file
라고 치면 부모의 Vim에서 file
가 열립니다. 최고.설치 방법은 링크 대상입니다!
그것을 응용하여 저는 다음과 같은 것도 사용하고 있습니다.
function nvcd
nvr -c "cd "(realpath $argv)
end
(fish입니다)
이제
nvcd .
그렇게하면 Vim의 현재 디렉토리가 터미널의 현재 디렉토리로 이동합니다.빈 버퍼가 열리면 터미널을 열도록 설정
" Open terminal on new buffer
autocmd VimEnter * if @% == '' && s:GetBufByte() == 0 | call Term()
function! s:GetBufByte()
let byte = line2byte(line('$') + 1)
if byte == -1
return 0
else
return byte - 1
endif
endfunction
새롭고 빈 버퍼가 열렸을 때, 단말을 열도록 하고 있습니다. 이것으로 Vim의 기동시/새로운 탭을 열었을 때 등에는 자동적으로
:terminal
가 실행된 상태가 됩니다.Term()
함수는 나중에 설명합니다.마지막 버퍼가 닫히면 Vim을 종료합니다.
왜 버퍼? 라는 점은 이쪽을 봐 주세요→ Vim에서 탭을 사용하지 않기 - Qiita
function! Term()
call termopen(&shell, {'on_exit': 'OnExit'})
endfunction
function! CloseLastTerm()
if len(filter(range(1, bufnr('$')), 'buflisted(v:val)')) == 1
:q
endif
endfunction
function! OnExit(job_id, code, event)
if a:code == 0
call CloseLastTerm()
endif
endfunction
기본적으로 단말기는
call Term()
로 시작합니다. 그러면 단말이 종료했을 때, 나머지의 버퍼가 하나이면 :q
그리고 Vim이 종료합니다.그런 다음 터미널 이외의 버퍼에도 적용합니다.
function! CloseBuf()
if len(filter(range(1, bufnr('$')), 'buflisted(v:val)')) == 1
:q
else
:bd
endif
endfunction
nnoremap <Leader>q :up<CR>:call CloseBuf()<CR>
이제 (단말이 아닌 버퍼에서)
<Leader>q
를 누르면 비슷한 동작을 얻을 수 있습니다.실제로는
autocmd BufDelete
, 결과적으로 열려 있는 버퍼의 수가 2
가 되어 버려 잘 판별할 수 없었습니다.Ctrl-Alt-T로 Vim 열기
마무리를 위해 Ubuntu에서
Ctrl-Alt-T
를 눌렀을 때 Vim을 열어야합니다. (유석에 update-alternatives
하는 것은 무서웠기 때문에...)gnome-terminal -e nvim
이것을 각자 Unity나 GNOME의 GUI로부터 설정하면 좋다고 생각합니다.
(덤) : terminal에서 빠져 나가는 명령을 Remap합니다.
이것은 하고 있는 사람도 많다고 생각합니다만, 이런 느낌입니다.
tnoremap <C-j> <C-\><C-n>
이상을 설정하면, 이런 느낌이 됩니다.
좋은 Vim Life!
Reference
이 문제에 관하여(NeoVim을 터미널로 사용하기 위해 한 일), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/acomagu/items/1199b94715a1ccdf1176텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)