외부에서 vim과 대화하기


12

tmux를 통해 키를 보내지 않고 다른 쉘에서 vim 인스턴스의 변수를 변경할 수 있습니까?

latexmk의 compiling_cmd, success_cmd 및 failure_cmd 옵션을 사용하여 상태 표시 줄에 컴파일 상태를 표시하고 싶습니다.

어쩌면 특정 파일의 존재 여부를 vim으로 볼 수 있습니까 (파일을 부울 변수로 사용)? 그러나 이것은 조금 더러워 보입니다. 더 나은 방법이 있기를 바랍니다.

답변:


19

인수를 사용하여 첫 번째 Vim 세션을 시작하면 --servername VIM:

$ vim --servername VIM

그런 다음 인수를 사용하여 다른 쉘에서 명령을 보낼 수 있습니다 --remote-send.

예를 들어, 상태 표시 줄을 사용하여 일부 변수의 값을 표시하고 g:myvarvimrc에 다음 행이있는 경우 :

let g:myvar = "foo"
set stl+=%{g:myvar}

그런 다음 :let g:myvar = "bar"다른 쉘에서 값 ( )을 변경할 수 있습니다 .

$ vim --remote-send ':let g:myvar = "bar"<cr>'

상태 표시 줄에는 값의 변경 사항이 반영되어야합니다.


마지막 의견에서 알 수 있듯이 Vim 인스턴스가 정상 모드가 아닌 경우 이전 명령이 예상대로 작동하지 않습니다. 더 간단 할 수 있지만 다음과 같은 두 가지 가능한 솔루션이 있습니다.

1) <esc>정상 모드에 있도록 키 추가
2) 표현식을 평가하는 --remote-expr대신 인수 를 사용하고 --remote-send코드에 새 값을 변수에 할당하는 작은 도우미 함수를 작성하십시오.

첫 번째 해결책 :

$ vim --remote-send '<esc>:let g:myvar = "bar"<cr>'

두 번째 해결책 :

vimrc에서 다음 함수를 정의하십시오.

function! Myfunc(value)
    let g:myvar = a:value
endfunction

그런 다음 쉘에서 :

$ vim --remote-expr 'Myfunc("bar")'

감사합니다! 이 기능이 컴파일되지 않았으므로 다시 컴파일하겠습니다. 잘하면 그것은 neovim에서 동일합니다.
Toothrot

3
@Lawrence 내가 틀렸을 수도 있지만 neovim이 +clientserver기능을 구현하지 않는다고 생각 합니다 ( github.com/tpope/vim-dispatch/issues/163#issuecomment-175383047 ). 이 경우이 플러그인이 도움이 될 것입니다. github.com/mhinz/neovim-remote
user9433424

이것은 tmux를 사용하여 키를 보내는 것과 동일한 효과가 있으며 vim 서버가 어떤 모드에 있는지 아는 데 달려 있습니다 (예에서는 일반 모드로 가정). 이상적으로 변수를 직접 설정할 수 있기를 원합니다.
Toothrot
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.