2013-07-12 4 views
1

Есть ли способ получить текущий компилятор в vim?Определить компилятор для текущего файла в vim

Например, я хочу, чтобы map <Leader>r скомпилировал текущий файл и map <Leader>i для загрузки REPL.

То, что я делал до сих пор является определяющей одно отображения для каждого расширения файла, например:

au BufNewFile,BufRead *.m map <Leader>r :!octave %<cr> 
au BufNewFile,BufRead *.m map <Leader>i :!octave<cr> 

После делать это для трех типов файлов (питон и рубиновый работать точно так же) мне интересно, если есть способ определить одно сопоставление, которое будет работать для всех видов файлов (которые имеют определенный компилятор). Является ли это возможным?

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

ответ

1

Обновление:

Спасибо за разъяснение вашего вопроса. Я постараюсь предложить лучший ответ, в том числе дополнительную функцию для вызова интерактивного отладчика (в дополнение к запрошенному RUN REPL).

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

Надеюсь, это реализует альтернативный подход, который вы пытаетесь достичь.

Добавьте это в файл .vimrc:

" Per-file-type definitions for   RUN  REPL  DEBUG 
au BufNewFile,BufRead *.m let b:comp = ["octave", "octave", "octave"] 
au BufNewFile,BufRead *.py let b:comp = ["python", "python", "python -m pdb"] 
au BufNewFile,BufRead *.pl let b:comp = ["perl", "perl", "perl -d"] 
au BufNewFile,BufRead *.rb let b:comp = ["ruby", "irb", "ruby -rdebug"] 

nmap <Leader>r :exec "!" b:comp[0] " %"<cr> 
nmap <Leader>i :exec "!" b:comp[1]<cr> 
nmap <Leader>d :exec "!" b:comp[2] " %"<cr> 

В au команды задают буфер локальной б: аккомпанемента массив запуска/замена/отладочных команд на основе расширения файла. Команды nmap отображают нажатия клавиш, которые вы указали.

И тогда вы можете использовать:

<Leader>r - to run the current buffer 
<Leader>i - to start REPL in language corresponding to current buffer 
<Leader>d - to start interactive debugger for the current buffer 

Конечно, я понимаю, что не существует такого понятия, как истинный РЕПЛ для Perl (по крайней мере, не вне коробки), и для того, для вызова интерактивного отладчика после запуска октавы появляется you must call a function such as dbstop("func") to set a breakpoint, а затем вызывать функцию, которую вы хотите отлаживать, и так далее.

Нижняя строка: «конечный пользователь» этого подхода должен иметь в виду, что поддержка run/repl/debug будет сильно отличаться в зависимости от возможностей языка, с которым вы работаете.

+0

Привет, спасибо за действительно хороший ответ. Я обновил вопрос. Оказывается, я хочу иметь возможность вызывать компилятор/интерпретатор более чем одним способом, а не просто компилировать текущий файл. –

+0

См. Обновленный ответ для вашего обновленного вопроса. Если он работает должным образом, дайте мне знать, и я могу отредактировать свой новый ответ, чтобы удалить предыдущий ответ на предыдущую версию вопроса. – linguanerd

+0

Спасибо. Наверное, это так сухо, что мы можем получить. –

1

Используйте Makefile:

au BufNewFile,BufRead *.m map <Leader>r :make -f ~/.vim/global.make %<cr> 

Я думаю, что вы можете написать Makefile, который будет делать разные вещи в зависимости от типа аргумента.

Смежные вопросы