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


10

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

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

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

Ответы:



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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.