Vim-마지막 쉘 명령을 키에 매핑 마지막 명령을

bash로 보낸 마지막 명령을 반복하기 위해 leader-r을 매핑하는 방법이 있습니까?

예를 들어 C 파일로 작업 할 때 :! make 또는 gcc를 입력하지 않고 vim에서 프로그램을 컴파일하고 실행하고 싶습니다.

특정 명령을 키에 바인딩 할 수는 있지만 다른 유형의 파일에서는 작동하지 않습니다.



답변

:!!명령은 마지막을 반복합니다 :!{cmd}. 그것은 훌륭한 ol ‘ vi 에서도 가능 합니다.


답변

편집 : Ingo Karkat의 대답 이 훨씬 좋습니다. …이 게시물이 수락되지 않으면이 게시물을 삭제할 것입니다.

한 가지 해결책이 있습니다. 마지막 100 개의 명령 만 검색합니다. 분명히이 숫자를 변경할 수 있습니다 (기록 기록은 입력 한 마지막 명령 인 -1에서 시작하므로 숫자가 낮을수록 더 많이 검색됩니다).

fun! LastCommand()
        let l:i = -1
        while l:i > -100
                let l:cmd = histget("cmd", l:i)
                if strpart(l:cmd, 0, 1) == "!"
                        let l:i = 1
                        execute l:cmd
                        break
                endif
                let l:i -= 1
        endwhile

        if l:i < 1 | echoerr "No command found" | endif
endfun
nnoremap <Leader>r :call LastCommand()<CR>