Vim: asigna el último comando de shell a la tecla

10

¿Hay alguna forma de mapear leader-r para repetir el último comando enviado a bash?

Por ejemplo, cuando trabajo con archivos C, me gustaría compilar y ejecutar programas desde vim sin escribir:! Make o gcc.

Sé que puedo vincular un comando específico a la tecla, pero no funcionará para otros tipos de archivos.

camabeh
fuente

Respuestas:

9

El :!!comando repite el último :!{cmd}. Incluso está disponible en venerable ol ' vi .

Ingo Karkat
fuente
1

Editar: la respuesta de Ingo Karkat es mucho mejor. ... Eliminaría esta publicación si no fuera aceptada (lo que significa que no puedo).

Aquí hay una solución. Solo busca los últimos 100 comandos, obviamente, puede cambiar este número (la indexación del historial comienza en -1, que es el último comando que escribió, por lo que cuanto menor sea el número, más se buscará).

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>
Martin Tournoij
fuente
Prefiero no eliminar esto ya que si lo hago, eso dejará una pregunta sin respuesta. He votado a favor la respuesta de Ingo, que ahora tiene más votos que la tuya. Dado el descargo de responsabilidad que ha agregado, la eliminación parece un poco dura. Nunca se sabe quién puede encontrar esto útil. Si te sientes tan fuerte al respecto, deja un comentario al OP pidiéndoles que acepten la respuesta de Ingo. Luego, si aún así lo desea, puede eliminar el suyo.
terdon