Vim - сопоставить последнюю команду оболочки с ключом

10

Есть ли способ сопоставить leader-r, чтобы повторить последнюю команду, отправленную в bash?

Например, при работе с файлами C я хотел бы скомпилировать и запустить программу из vim без ввода:! Make или gcc.

Я знаю, что могу связать определенную команду с ключом, но она не будет работать для других типов файлов.

camabeh
источник

Ответы:

9

Команда :!!повторяет последнюю :!{cmd}. Это даже доступно в почтенном старом ви .

Инго Каркат
источник
1

Изменить: ответ Инго Каркат намного лучше. ... Я бы удалил этот пост, если он не был принят (что означает, что я не могу).

Вот одно из решений. Он ищет только последние 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>
Мартин Турной
источник
Я бы предпочел не удалять это, так как если я сделаю это, это оставит вопрос без ответа. Я проголосовал за ответ Инго, у которого сейчас больше голосов, чем у вас. С учетом заявления об отказе, которое вы добавили, удаление кажется немного резким. Вы никогда не знаете, кто может найти это полезным. Если вы так сильно к этому относитесь, оставьте комментарий ОП, чтобы они приняли ответ Инго. Затем, если вы все еще хотите, вы можете удалить свой.
Terdon