Добавление команды в Vim - PullRequest
38 голосов
/ 04 января 2010

Я наконец решил попробовать Vim , так как меня все больше раздражают редакторы GUI. Пока что мне это нравится, но я не могу найти помощи по проблеме, которая у меня возникает ...

Я пытаюсь сопоставить команду :Pyrun с :!python % в Vim, используя cmap. Отображение хорошо отображается, если я наберу :cmap. Однако при вводе :Pyrun я получаю это сообщение об ошибке:

Не является командой редактора: Pyrun.

Вот что я пробую в .vimrc:

:autocmd FileType python :cmap Pyrun<cr> !python %<cr>
:autocmd FileType python :cmap Intpyrun<cr> !python -i %<cr>

Что я могу сделать, чтобы решить эту проблему?

Ответы [ 3 ]

40 голосов
/ 04 января 2010

Я бы попробовал что-то подобное в вашем .vimrc или в вашем ftplugin / python_ft.vim

command Pyrun execute "!python %"
command Intpyrun execute "!python -i %"

Тогда :Pyrun и :Intpyrun должны работать

Затем можно назначить функциональную клавишу каждому

map <F5> :Pyrun<CR>
map <F6> :Intpyrun<CR>
28 голосов
/ 04 января 2010

Я лично предпочитаю другой подход. Сначала создайте функцию, получающую аргументы команды, а затем создайте команду для вызова функции:

fun! DoSomething( arg ) "{{{
    echo a:arg
    " Do something with your arg here
endfunction "}}}

command! -nargs=* Meh call DoSomething( '<args>' )

Так было бы как

fun! Pyrun( arg ) "{{{
    execute '!python ' . expand( '%' )
endfunction "}}}

command! -nargs=* Pyrun call Pyrun( '<args>' )

Но есть лучший способ сделать это в Vim. Используйте makeprg:

makeprg=python\ %

Просто введите :make, чтобы запустить текущий файл Python. Используйте :copen для отображения списка ошибок.

10 голосов
/ 04 января 2010

G'day,

Как и в случае с ответом karoberts, я предпочитаю более прямой:

:map <F9> :!python %<CR>

Если мой сценарий создает какой-либо вывод, мне также нравится записывать его во временный файл, а затем автоматически читать содержимое этого файла в другой буфер, например,

:map <F9> :!python % 2>&1 \| tee /tmp/results

Затем я установил авточитание, введя :set autoread и открыв файл результатов в другом буфере

:split /tmp/results<CR>

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

НТН

ура

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...