Команда для SVN фиксирует текущий файл или каталог или выше в иерархии каталогов - PullRequest
1 голос
/ 13 октября 2010

У меня есть этот ярлык в моем vimrc:

map cmt :!start TortoiseProc.exe /command:commit /path:"%" /closeonend:3 <CR>

Что это делает, когда я нажимаю 'cmt', vim откроет диалог фиксации для файла, которым я сейчас занятредактирование с vim.

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

Пример, чтобы прояснить ситуацию:

Допустим, у меня есть такая файловая структура project/logs/access.log.Если я редактирую access.log и

  • , нажмите 'cmt' - я должен получить диалог для фиксации access.log;
  • нажмите '1cmt' - я должен получить диалогдля фиксации каталога logs;
  • нажмите '2cmt' - я должен получить диалог для фиксации каталога project;

... и т. д.

Примечание: я использую gvim в Windows 7

Надеюсь, кто-нибудь может мне помочь с этим.Спасибо.

1 Ответ

1 голос
/ 13 октября 2010

Я реализовал желаемую функциональность в следующей функции. Он принимает два аргумента: путь к файлу, с которого нужно начать, и количество уровней, которые нужно поднять. Затем он сокращает указанное количество компонентов хвостового пути и создает команду для запуска (в соответствии с вашим примером). Затем он запускает команду и проверяет код выхода, возвращаемый оболочкой после выполнения. Если произошла ошибка, отображается сообщение об ошибке вместе с выводом команды.

function! TortoiseCommitDialog(path, count)
    let pat = '[/\\]\@<=\%([^/\\]\+[/\\]\?\)\{' . a:count . '}$'
    let path = substitute(a:path, pat, '', '')
    let cmd = 'TortoiseProc.exe /command:commit ' .
    \   '/path:' . shellescape(path) . ' /closeonend:3'
    let out = system(cmd)
    if v:shell_error
        echoerr 'Failed to run Tortoise commit dialog'
        echo out
    end
endfunction

Чтобы использовать эту функцию во время редактирования, я рекомендую определить команду (потому что она может обрабатывать аргументы в отличие от отображения) следующим образом:

command! -count Cmt call TortoiseCommitDialog(expand('%:p'), <count>)

Из-за флага -count вы можете выполнить команду с числом команд двумя способами: :3Cmt и :Cmt 3 (или даже без пробела: :Cmt3).

...