Vim новое окно для выполнения программы, похожее на cwindow - PullRequest
1 голос
/ 21 марта 2011

Я использую Vim для редактирования / компиляции отдельных cpp файлов (makepgr=g++\ -g\ %) и хочу, чтобы в идеале выполнялись двоичные файлы, используя такие короткие клавиши, как F6 .Тогда желаемое поведение - открыть новое окно, подобное :cwindow с фиксированной максимальной высотой (скажем, 20 строк), которое содержит выходные данные программы.Я также хочу иметь возможность снова закрыть это окно с помощью другого ярлыка, например F7 .

. В качестве бонуса было бы здорово, чтобы время выполнения программы отображалось в заголовке окна./status.

РЕДАКТИРОВАТЬ: двоичные файлы, о которых я говорю, не являются интерактивными!В основном они читают некоторые входные файлы, выполняют манипуляции с данными, записывают свои результаты в другие файлы и при этом получают некоторый вывод.

Ответы [ 4 ]

3 голосов
/ 30 марта 2011

Этот маленький скрипт должен сделать свое дело:

let s:title="ProgramOutput"

function! Open_output_window()
    let winnr = bufwinnr(s:title)
    if winnr != -1
        exe winnr . 'wincmd w'
        return
    endif

    let bufnr = bufnr(s:title)
    if(bufnr == -1)
        let wcmd = s:title
    else
        let wcmd = '+buffer' . bufnr
    endif

    exe 'silent! botright vertical 80 split ' .wcmd

    silent! setlocal buftype=nofile
    silent! setlocal noswapfile
    silent! setlocal nobuflisted
endfunction

function! Close_output_window()
    let winnr = bufwinnr(s:title)
    if winnr != -1
        exe winnr . 'wincmd w'
        close
    endif
endfunction

nmap <F6> <ESC>:call Open_output_window()<CR>:r ! %:r.exe<CR>
nmap <F5> <ESC>:call Close_output_window()<CR>

Большая часть этого кода взята из плагина taglist.vim - его достаточно просто понять. Вы можете изменить команду split для ваших предпочтений размера окна.

1 голос
/ 29 марта 2011

Добавить к vimrc:

 map <F6> :tabnew<CR>:.!ls -la<CR>

Откройте vim и нажмите F6 . Вы должны увидеть в новой вкладке вывод команды ls -la. Теперь, если это работает для вас, вы можете изменить его (замените myprog именем вашего исполняемого файла):

 map <F6> :tabnew<CR>:.!./myprog<CR>

Вы даже можете дать название этой вкладке:

 map <F6> :tabnew myprog<CR>:.!./myprog<CR>

Не нравятся вкладки? Замените tabnew на split или vsplit, что позволяет разбить окно по горизонтали или вертикали. Хотите, чтобы разделенное окно было маленьким? Используйте

 map <F6> :5split myprog<CR>:.!./myprog<CR>

Замените 5 любым другим номером, который вам нравится. Также добавьте

 map <F7> :tabclose<CR>

чтобы получить возможность закрыть вкладку, нажав F7 .

P.S. Вы можете заменить жестко myprog имя на expand("%:r").".exe" (для Windows) или просто expand("%:r") (для * nix), как уже было сказано.

1 голос
/ 21 марта 2011

Я не уверен, насколько это полезно, поскольку вы спрашиваете о vim:

Моей первой мыслью о том, как решить эту проблему, будет использование экрана GNU.Причина не в том, что vim не способен сделать это, но этот vim не совсем пригоден для использования в качестве эмулятора терминала, поэтому запуск некоторых интерактивных программ не работает.Плюс экран относительно прост в настройке.

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

0 голосов
/ 28 марта 2011

Вы можете перенаправить ввод в окно быстрого исправления (аналогично тому, как работает :make):
:cex system(expand("%:r").".exe")

Вы можете перемещаться по истории исправлений, используя :colder и :cnewer

Я понимаю, что это не совсем то, что вы искали, но, надеюсь, это достаточно близко, чтобы быть полезным.

...