2010-12-19 4 views
2

터미널 명령을 호출 할 내 .vimrc 파일에 추가 할 수있는 함수를 작성한 다음 <leader>u에 바인딩하고 싶습니다.VIM에서 터미널 명령을 실행 하시겠습니까?

나는 그것을 작동시키지 않는 것 같다. 나는 system() 함수를 사용할 수 있다고 믿지만 사용 가능한 문서가 거의 없으며 제대로 작동하지 않는 것 같다.

해당 터미널 명령은 'git push origin master'입니다.

플러그인에 git을 사용할 수 있다는 것을 알고 있지만, 이것들 중 하나를 찾고 있지 않습니다. 터미널 명령을 키 조합에 바인드하는 단순한 기능입니다.

function gitPush() 
system("git push origin master") 
endfunction 
:nmap <leader>u :call gitPush() 

나는 이것이 잘 모르겠지만, vim does not는 문서를 매우 유용하게 만들고 싶어한다.

타이

+2

': help'에 대해 알고 있습니까? ': help system()'은'system()'함수에 대한 문서를 보여줍니다. ': help shell'은'shell' 명령에 대한 문서를 제공하고 바로 아래에'!'명령에 대한 문서를보실 수 있습니다. –

+2

관련된 메모에서 쉘 명령을 사용하려는 목적이 git과 상호 작용하는 것이라면 '도망자'또는 VCSCommand와 같은 git 관련 Vim 플러그인 중 하나를 사용하는 것이 훨씬 낫습니다. 도망자 페이지 링크 : http://www.vim.org/scripts/script.php?script_id=2975 –

답변

7
function GitPush() 
    !git push origin master 
endfunction 

서브 쉘에서 명령을 실행하는 방법입니다.

편집 : 사용자 정의 함수가 너무 대문자로 시작해야합니다, 당신은 당신의 자신의 함수를 호출하고 내장을 위해 그것을 사용하는 것이 실패 할 call를 사용하는 이유는 무엇입니까)

1

를? @Richo에 의해 언급 된 다른 오류 중 하나입니다. 사용자 정의 함수는 대문자로 시작하거나 b:, w:, t: (둘 다 로컬 함수가 아닙니다), g:, s: (스크립트 내부에만 있습니다. \w: (예 : function _:foo() 작동) 또는 {filename_without_extension}# (파일 이름이 \w+.vim과 일치하는 경우)까지도 (매핑시 s:)으로 바꿔야합니다. 익명 함수 인 경우 :

let dict={} 
function dict["foo"]() 
endfunction 
function dict.bar() 
endfunction 

또한 자본으로 시작하지 않아도됩니다. 올바른 해결 방법은 다음과 같습니다.

function g:gitPush() 
    call system("git push origin master") 
endfunction 
nnoremap <leader>u :call g:gitPush()<CR> 

세 번째 오류는 <CR>을 생략합니다. 가능하면 nore을 사용하는 것이 좋기 때문에 nmapnnoremap으로 변경했습니다. 명령의 시작 부분에 :이 있으면 문제가되지 않지만 오류는 아니지만 필자는 쓰기 만하지 않습니다. 일반 모드 매핑에서 명령 모드를 시작해야하지만 스크립트 내부에서는 필요하지 않습니다.

관련 문제