Напишите Git сообщение коммита в новом окне Vim, затем передайте все в Vim - PullRequest
3 голосов
/ 20 августа 2010

У меня есть эти отображения Vim для Git.Большинство приведенных ниже команд работают, но последняя, ​​ g m , вообще не работает.Я хочу открыть новый Vim (желательно с уже загруженным шаблоном сообщения git commit в соответствии с поведением терминала по умолчанию), отредактировать и сохранить мое сообщение, а затем зафиксировать.

Есть какие-нибудь идеи для другого подхода к этому?

" git shortcuts
"" show diff in new window
if has("gui_running")
  noremap gd :!git diff <BAR> gvim -<CR><CR>
else
  noremap gd :!git diff <BAR> vim -<CR><CR>
endif
noremap gs :!git status<CR>
noremap ga :!git add %<CR>
"" edit commit message in new window
if has("gui_running")
  noremap gm :!gvim __vim_gitcommitmessage && git commit -F __vim_gitcommitmessage && rm __vim_gitcommitmessage<CR>
else
  noremap gm :!vim __vim_gitcommitmessage && git commit -F __vim_gitcommitmessage && rm __vim_gitcommitmessage<CR>
endif

Обновление:

По предложению VonC я сейчас использую fugitive.vim .Я заменил свои предыдущие привязки Vim и рекомендую этот плагин всем, кто использует Vim и Git.

" fugitive shortcuts
noremap ggs :Gstatus<cr>
noremap ggc :Gcommit<cr>
noremap gga :Gwrite<cr>
noremap ggl :Glog<cr>
noremap ggd :Gdiff<cr>

Ответы [ 2 ]

4 голосов
/ 20 августа 2010

Vim имеет несколько сценариев-оберток Git, которые инкапсулируют общие команды Git и позволяют фиксировать через временный буфер:

Тот, который может соответствовать требованиям, будет fugitive.vim : см. its doc :

:MinSCMCommitTracked[!]         (Default mapping: \s<C-c>)

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

            Used SCM commands ~
            hg  : commit
            git : commit -a
            bzr : commit

:MinSCMCommitAll[!]             (Default mapping: \sc)

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

Эта команда отличается от |: MinSCMCommitTracked |при добавлении неотслеживаемых файлов в текущий репозиторий.

            Used SCM commands ~
            hg  : commit -A
            git : add -a && commit -a
            bzr : add && commit

При наличии доступного источника вы можете повторно использовать необходимую часть в своем собственном скрипте Vim.

1 голос
/ 20 августа 2010

Какой смысл редактировать файл, а затем указывать git использовать его в качестве сообщения фиксации? Почему вы не можете просто использовать нормальный режим работы - запустить git commit, позволить ему порождать vim, написать сообщение, сохранить и выйти для фиксации? Или, если вам нужен шаблон, git commit -e -F <template file>.

...