LINUX.ORG.RU

vim выполнение скрипта

 ,


0

2

Значит вот что я хочу: допустим есть

/home/user/test

В нем лежит

/home/user/test/test_script.py
/home/user/test/modules/some/function.py

я хочу, находясь в буффере /home/user/test/modules/some/function.py нажимать ,r и чтобы выполнялся не текущий буффер, а /home/user/test/modules/some/function.py

Значит, что я делаю ? Я создаю /home/user/test/.project и пишу в него exec=test_script.py. Далее я поднимаюсь на уровень выше и чекаю на предмет наличия .project. Нашли ? Да! Далее мне нужно прочитать файл и сплитом добраться до test_script.py. Вот реализация

function! FindRootExec()
    let s:old_path=expand('%:p:h')
    exec "cd " . expand ("%:p:h")
    while ! filereadable (getcwd () . "/.project") && getcwd () != "/"
        cd ..
    endwhile
    cd .
    let real_path = getcwd()
    let projf= getcwd() . "/.project"
    let tmp1 = readfile(projf)
    let tmp2 = split(tmp1[0], "=")
    let tmp3 = real_path . "/". tmp2[1]    
endfunction

В tmp3 лежит /home/user/test/test_script.py. Сейчас у меня в ~/.vim/after/ftplugin/python.vim такой бинд

nnoremap ,r <ESC>:wall!<CR><ESC>:!clear;%:p<CR>
Как дальше поступить ?

PS: плагин project не предлагать:)

★★★★

Последнее исправление: bryak (всего исправлений: 1)

Ответ на: комментарий от l-_-l

Внезапно

я хочу, находясь в буффере /home/user/test/modules/some/function.py нажимать ,r и чтобы выполнялся не текущий буффер, а /home/user/test/modules/some/function.py

bryak ★★★★
() автор топика

Поставь плагин embear/vim-localvimrc. Он делает ровно то, что тебе нужно: по каждому событию BufWinEnter сканирует иерархию каталогов вверх, находит файл с именем .lvimrc и выполняет его содержимое.

Юзать примерно так - создаешь файл /home/user/test/.lvimrc и прописываешь туда нужный маппинг:

execute "nnoremap <buffer> <Leader>r :cd " . g:localvimrc_script_dir . " <Bar> !python test_script.py<CR>"

В этот же файл удобно прописывать разные локальные per-directory настройки «проекта», всякие отступы и т.д.

archie
()
Ответ на: комментарий от archie

ну а стОит ли вообще его заюзывать ? Вот пример, как можно выставлять локальные параметры для проекта. Только лишь из-за кастом билдинга. Но makeprg можно же локально переопределить, ну или как я сделал - дописать в .project exec=./build.sh и тд

bryak ★★★★
() автор топика
Последнее исправление: bryak (всего исправлений: 1)
Ответ на: комментарий от bryak

Ну мне норм. Вполне себе KISS работа с проектами.

Вот пример, как можно выставлять локальные параметры для проекта.

У этого способа есть недостаток - локальный .vimrc подхватывается только из текущего каталога. Забыл сделать cd куда надо - привет слетевшим настройкам. А с плагином открываешь любой файл откуда угодно и он сам находит свой проект и грузит все настройки.

Только лишь из-за кастом билдинга.

Не только. У меня навскидку - cd в корень проекта, показ NERDTree, детект платформы, выбор compiler/makeprg (make, msbuild, xcodebuild), команда переключения Debug/Release конфигураций, установка path (чтобы работал gf), маппинги и прочие настройки по мелочи.

Вобщем если не нравится вариант с плагином, то можно попробовать дописать нужный маппинг в конец твоей функции FindRootExec. Сформировать нужную строку с nnoremap и путем из tmp3, а потом дернуть ее через exec, как я показывал выше. А вызов самой FindRootExec повесить на autocmd BufWinEnter. Вроде должно работать.

archie
()
Ответ на: комментарий от archie

На этом плагине и остановился. Спасибо)

bryak ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.