{"id":13469162,"url":"https://github.com/jreybert/vimagit","last_synced_at":"2025-04-08T16:01:31.347Z","repository":{"id":42645071,"uuid":"43052967","full_name":"jreybert/vimagit","owner":"jreybert","description":" Ease your git workflow within Vim","archived":false,"fork":false,"pushed_at":"2024-05-29T13:59:08.000Z","size":1094,"stargazers_count":1320,"open_issues_count":31,"forks_count":49,"subscribers_count":34,"default_branch":"master","last_synced_at":"2025-04-01T14:01:43.526Z","etag":null,"topics":["git","magit","vim","vim-plugin"],"latest_commit_sha":null,"homepage":"","language":"Vim Script","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jreybert.png","metadata":{"files":{"readme":"README.md","changelog":"Changelog","contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-09-24T07:54:59.000Z","updated_at":"2025-03-16T13:14:09.000Z","dependencies_parsed_at":"2024-01-04T16:48:23.376Z","dependency_job_id":"bb33d9d5-de60-43d8-9e72-c4c5b27cb34d","html_url":"https://github.com/jreybert/vimagit","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jreybert%2Fvimagit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jreybert%2Fvimagit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jreybert%2Fvimagit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jreybert%2Fvimagit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jreybert","download_url":"https://codeload.github.com/jreybert/vimagit/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247878014,"owners_count":21011158,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["git","magit","vim","vim-plugin"],"created_at":"2024-07-31T15:01:28.205Z","updated_at":"2025-04-08T16:01:31.297Z","avatar_url":"https://github.com/jreybert.png","language":"Vim Script","readme":"# vimagit\n\n[![Join the chat at https://gitter.im/jreybert/vimagit](https://badges.gitter.im/jreybert/vimagit.svg)][4]\n[![Master build status](https://travis-ci.org/jreybert/vimagit.svg?branch=master)][13]\n\nEase your git workflow within vim.\n\nFrom a very single vim buffer, you can perform main git operations in few key press. To name a few:\n* Visualize all diffs in your git repository.\n* Stage file, hunks or even just parts of a hunk using a single key press.\n* Write or amend your commit message and commit in the same buffer.\n\nTake a look at [TL;DR](#tldr) to start using it immediately. If you encounter any performance issue, take a look in the section [performance](#performance).\n\n![Example of vimagit 1.7.2](https://user-images.githubusercontent.com/533068/28827790-ee0ec640-76ce-11e7-840b-10a4f5e4eae4.gif \"Example of vimagit 1.7.2\")\n\nSome screencasts:\n* A simple [asciicast][5]\n* A [commented video presenting vimagit][6] (thank you [Mike Hartington][7]!)\n\nThis workflow is 100% inspired from magnificent emacs [Magit][1] plugin.\n\n## Outstanding features\n\n* [x] Preview all your git changes in one unique buffer, folded at hunk level.\n* [x] Interactively stage/unstage/discard changes with one key press.\n* [x] Stage/unstage at file/hunk/line level.\n* [x] Write the commit message in the same buffer.\n* [x] From a hunk in magit buffer, jump to the file at the diff position.\n* [x] 100% VimL plugin, no external dependency (except git of course).\n* [x] Enhanced by external plugins: [vim-gitgutter][2] [vim-airline][8]\n* [x] Stable. All features are tested in continuous integration.\n\nMore to come:\n* [ ] Add a push function, taking care if needed about the remote repository and branch [#24](../../issues/24) .\n* [ ] Handle commit fixup! and squash!, with a smart git log popup [#23](../../issues/23) .\n* [ ] Handle stash: add, pop, apply, drop [#26](../../issues/26) .\n* [ ] Stage multiple hunks or file by visually selecting them [#83](../../issues/83) .\n* [ ] Go through history, cherry-pick changes.\n* [ ] Make vimagit more efficient for huge repositories, with a lot of diffs.\n* [ ] Something is missing? Open an [issue][9]!\n\n\u003e Why should I use vimagit, there are already plethora git plugins for vim?\n\n* fugitive is a very complete plugin, with a lot of functions. I use it for years, and it is a fundamental tool in my workflow. But visualize your changes and staged them in broad number of files is really a pain.\n* [vim-gitgutter][2] is very well integrated into vim, but without the ability to commit stages, it stays an informational plugin.\n\n## TL;DR\n\nThis is the minimal required set of command you must know to start playing with vimagit. See [Mappings](#mappings) for a complete description.\n\nTo simply test vimagit, modify/add/delete/rename some files in a git repository and open vim.\n\n- `:Magit`  \n  Open magit buffer with [:Magit](#magitshow_magit) command.\n- `\u003cC-n\u003e`  \n  Jump to next hunk with `\u003cC-n\u003e`, or move the cursor as you like. The cursor is on a hunk.\n- `S`  \n  While the cursor is on an unstaged hunk, press `S` in Normal mode: the hunk is now staged, and appears in \"Staged changes\" section (you can also unstage a hunk from \"Staged section\" with `S`).\n- `CC`  \n  Once you have stage all the required changes, press `CC`.\n  - Section \"Commit message\" is shown.\n  - Type your commit message in this section.\n  - To commit, go back in Normal mode, and press `CC` (or `:w` if you prefer).\n  \nYou just created your first commit with vimagit!\n\n## Performance\n\nFor various reasons, vimagit may be slow to refresh. A refresh happends every time you stage, unstage, commit or refresh the vimagit buffer. Currently, vimagit is quite dumb: every time the buffer is refreshed, it dumps everything and reconstruct the entire buffer. It could be smarter, but there are a lot of corner cases and it is quite a big work.\n\nvimagit tends to be slow when:\n* there is a lot of diff lines\n* there are long lines\n\nPossible solution:\n\n### Fold level\n\n```let g:magit_default_fold_level = 0```\n\nChange the default fold level. When fold level is set to 0, diff content are not print in the buffer. The buffer will show the files containing diffs. If you want to see the diff relative to file, move the cursor to the filename, and press`\u003cEnter\u003e`.\n\nIn a near future, vimagit may try to be smart, and adapt the foldlevel automatically, based on the bumber of diff lines.\n\n## Contribute\n\nAny contribution is welcomed. Contribution can be bug fix, new feature, but also feedback or even tutorial! Check contribution rules [here](CONTRIBUTING.md).\n\n### Release 1.8\n\nNow that stage feature is quite mature, I would like to introduce more commands to vimagit. For this, user feedback is very important to me, to ensure that UI is appropriate for the most of users and that vimagit fits most of git workflows (by UI, I mean default mapping, user prompt, etc.).\n\nProper way to discuss is on [gitter](https://gitter.im/jreybert/vimagit) and on issues opened for the new features.\n\nThe next major release of vimagit will see 3 new important features. Interested users are encouraged to discuss the best way to design these new features:\n* **git push**: push from magit buffer with `\u003cCP\u003e`. magit will detect the default push branch; if there is not default, or if the user used another mapping, magit will provide a way to select remote branch to push #24 \n* **git checkout**: checkout a branch with `\u003cCH\u003e`. Like for push, a UI must be designed to select the branch, with completion of course #141 \n* **git stash**: stage what you want (files, hunks, lines, exactly the same way as for a commit), and stash them #142 \n\nThanks for your time.\n\n## Installation\n\nThis plugin follows the standard runtime path structure, and as such it can be installed with a variety of plugin managers:\n\n- Pathogen  \n  `git clone https://github.com/jreybert/vimagit ~/.vim/bundle/vimagit`  \n  Remember to run :Helptags to generate help tags\n- NeoBundle  \n  `NeoBundle 'jreybert/vimagit'`\n- Vundle  \n  `Plugin 'jreybert/vimagit'`\n- Plug  \n  `Plug 'jreybert/vimagit'`\n- VAM  \n  `call vam#ActivateAddons([ 'jreybert/vimagit' ])`\n- manual  \n  copy all of the files into your ~/.vim directory\n\n## Usage\n\n### Modes\n\nvimagit buffer has modes. Mappings may have different behavior, depending on current mode and cursor position.\n\nFor the moment, vimagit counts only two modes.\n\n#### Stage mode\n\nThis is the default mode. In this mode, you can stage and unstage hunks, refresh vimagit buffer...\n\n#### Commit mode\n\nIn this mode, \"Commit message\" section is open, you can write your commit message and validate your commit.\n\nCommit mode has two flavors.\n\n##### Commit mode flavors\n\n* *Normal*: current commit will be a new commit.\n* *Amend*: current commit will be meld with previous commit.\n  * Previous commit message is shown in \"Commit message\" section.\n  * Use this flavor if you forgot something in the previous commit.\n\nBy the way, you can also perform all [stage mode](stage_mode) actions in [commit mode](commit_mode).\n\n### Sections\n\nIMPORTANT: mappings can have different meanings regarding the cursor position.\n\nThere are 5 sections:\n* Info: this section display some information about the git repository, like the current branch and the HEAD commit.\n* Commit message: this section appears in [commit mode](commit_mode). It contains the message to be committed.\n* Staged changes: this sections contains all staged files/hunks, ready to commit.\n* Unstaged changes: this section contains all unstaged and untracked files/hunks.\n* Stash list: this section contains all stahes.\n\n### Inline modifications\n* It is possible to modify the content to be staged or unstaged in magit buffer, with some limitations:\n  * only lines starting with a + sign can be modified\n  * no line can be deleted\n\n### Visual selection\n\nIt is possible to stage and unstage part of hunk, by different ways:\n* By visually selecting some lines, then [un]staging the selection with **S**.\n* By marking some lines \"to be staged\" with **M**, then [un]staging these selected lines with **S**.\n* [Un]staging individual lines with **L**.\n\nVisual selection and marked lines have some limitations for the moment:\n* Selection/marks must be within a single hunk.\n* Marks not within the hunk currently staged are lost during stage process magit buffer refresh.\n\n### Commands\n\n#### magit#show_magit()\n\nFunction to open magit buffer. This buffer will handle the git repository including focused file.\nIt is possible to handle multiple git repositories within one vim instance.\n\nIt takes 3 parameters:\n  * orientation (mandatory): it can be\n      - 'v', curent window is split vertically, and magit is displayed in new\n        buffer\n      - 'h', curent window is split horizontally, and magit is displayed in\n        new buffer\n      - 'c', magit is displayed in current buffer\n  * show_all_files: define how file diffs are shown by default for this session\n    (see [g:magit_default_show_all_files](#gmagit_default_show_all_files))\n  * foldlevel: set default magit buffer foldlevel for this session\n    (see [g:magit_default_fold_level](#gmagit_default_fold_level))\n\n#### :Magit\nOpen magit buffer in a vertical split (see [details](magitshow_magit)).\n\n#### :MagitOnly\nOpen magit buffer in current window (see [details](magitshow_magit)).\n\nYou can create a bash alias like magit=\"vim -c MagitOnly\"\n\n### Mappings\n\nFor each mapping, user can redefine the behavior with its own mapping. Each variable is described in vimagit help like *vimagit-g:magit_nameofmapping_mapping*\n\n#### Global mappings\n\nFollowing mappings are broadly set, and are applied in all vim buffers.\n\n##### \\\u003cLeader\u003eM\nOpen Magit buffer\n\n#### Local mappings\n\nFollowing mappings are set locally, for magit buffer only, in normal mode.\n\nSome mappings are set for the whole magit buffer, others are set for specific section only.\n\n##### Whole buffer mappings\n\n-----------------------------------\n\n\u003ckbd\u003eCC\u003c/kbd\u003e, \u003ckbd\u003e:w\u003c/kbd\u003e \u003ckbd\u003e:x\u003c/kbd\u003e \u003ckbd\u003e:wq\u003c/kbd\u003e \u003ckbd\u003eZZ\u003c/kbd\u003e\n\n * From [stage mode](stage_mode), set [commit mode](commit_mode) in [normal flavor](commit_mode_flavors) and show empty \"Commit message\" section.\n\n\u003ckbd\u003eCA\u003c/kbd\u003e\n\n * From [stage mode](stage_mode) or [commit mode](commit_mode): set [commit mode](commit_mode) in [amend flavor](commit_mode_flavors), and display \"Commit message\" section with previous commit message. Commit will be meld with previous commit.\n\n\u003ckbd\u003eCF\u003c/kbd\u003e\n\n * From [stage mode](stage_mode): amend the staged changes into the previous commit, without modifying previous commit message.\n\n-----------------------------------\n\n\u003ckbd\u003eCtrl\u003c/kbd\u003e+\u003ckbd\u003en\u003c/kbd\u003e,\u003ckbd\u003eCtrl\u003c/kbd\u003e+\u003ckbd\u003ep\u003c/kbd\u003e\n\n * Move to **N**ext or **P**revious hunk.\n\n-----------------------------------\n\n\u003ckbd\u003eEnter\u003c/kbd\u003e\n * All files are folded by default. To see the changes in a file, move cursor to the filename line, and press Enter. You can close the changes display retyping Enter.\n\n\u003ckbd\u003ezo\u003c/kbd\u003e,\u003ckbd\u003ezO\u003c/kbd\u003e\n\n * Typing \u003ckbd\u003ezo\u003c/kbd\u003e on a file will unhide its diffs.\n\n\u003ckbd\u003ezc\u003c/kbd\u003e,\u003ckbd\u003ezC\u003c/kbd\u003e\n\n * Typing zc on a file will hide its diffs.\n\n-----------------------------------\n\n\u003ckbd\u003eR\u003c/kbd\u003e\n\n * Refresh magit buffer\n\n-----------------------------------\n\n\u003ckbd\u003e-\u003c/kbd\u003e , \u003ckbd\u003e+\u003c/kbd\u003e , \u003ckbd\u003e0\u003c/kbd\u003e\n\n * Shrink,enlarge,reset diff context\n\n-----------------------------------\n\n\u003ckbd\u003eq\u003c/kbd\u003e\n\n * Close the magit buffer\n\n-----------------------------------\n\n\u003ckbd\u003e?\u003c/kbd\u003e\n\n * Toggle help showing in magit buffer\n\n-----------------------------------\n\n##### Stage / unstage sections mappings\n\n-----------------------------------\n\n\u003ckbd\u003eS\u003c/kbd\u003e\n\n * If cursor is in a hunk, stage/unstage hunk at cursor position.\n * If cursor is in diff header, stage/unstage whole file at cursor position.\n * If some lines in the hunk are selected (using **v**), stage only visual selected lines (only works for staging).\n * If some lines in the hunk are marked (using **M**), stage only marked lines (only works for staging).\n * When cursor is in \"Unstaged changes\" section, it will stage the hunk/file.\n * On the other side, when cursor is in \"Staged changes\" section, it will unstage hunk/file.\n\n-----------------------------------\n\n\u003ckbd\u003eF\u003c/kbd\u003e\n\n * Stage/unstage the whole file at cursor position.\n * When cursor is in \"Unstaged changes\" section, it will stage the file.\n * On the other side, when cursor is in \"Staged changes\" section, it will unstage file.\n\n-----------------------------------\n\n\u003ckbd\u003eL\u003c/kbd\u003e\n\n * Stage the line under the cursor.\n\n-----------------------------------\n\n\u003ckbd\u003eM\u003c/kbd\u003e\n\n * Mark the line under the cursor \"to be staged\".\n * If some lines in the hunk are selected (using **v**), mark selected lines \"to be staged\".\n * To staged marked lines in a hunk, move cursor to this hunk and press **S**.\n\n-----------------------------------\n\n\u003ckbd\u003eDDD\u003c/kbd\u003e\n * If cursor is in a hunk, discard hunk at cursor position.\n * If cursor is in diff header, discard whole file at cursor position.\n * Only works in \"Unstaged changes\" section.\n\n-----------------------------------\n\n\u003ckbd\u003eI\u003c/kbd\u003e\n\n * Add the file under the cursor in .gitignore\n\n-----------------------------------\n\n\u003ckbd\u003eE\u003c/kbd\u003e\n\nIf cursor is in a hunk, cursor will move in the file containing this hunk, at\n the line of the beginning of the hunk.\n * if the file is already visible in a window, cursor moves to this window at\n the hunk line\n * if there is more than one window open, cursor moves to last accessed window\n and open buffer at the hunk line\n * if there is only magit window opened, split vertically, moves cursor to new\n split and open buffer at the hunk line\n\nE means 'edit'.\n\n:exclamation: this function is extremely powerful, just give it a try!\n\n-----------------------------------\n\n##### Commit section mappings\n\n-----------------------------------\n\n\u003ckbd\u003eCC\u003c/kbd\u003e, \u003ckbd\u003e:w\u003c/kbd\u003e \u003ckbd\u003e:x\u003c/kbd\u003e \u003ckbd\u003e:wq\u003c/kbd\u003e \u003ckbd\u003eZZ\u003c/kbd\u003e\n\n * From [commit mode](commit_mode), commit all staged changes with [commit flavor](commit_mode_flavors) (*normal* or *amend*) with message in \"Commit message\" section.\n\n\u003ckbd\u003eCA\u003c/kbd\u003e\n\n * From [stage mode](stage_mode) or [commit mode](commit_mode): set [commit mode](commit_mode) in [amend flavor](commit_mode_flavors), and display \"Commit message\" section with previous commit message. Commit will be meld with previous commit.\n\n\n\u003ckbd\u003eCU\u003c/kbd\u003e\n\n * From [commit mode](commit_mode): go back to stage mode (current commit message will be lost).\n\n-----------------------------------\n\n#### Mapping update\n\nSince vimagit 1.7, jump mappings have changed:\n *  Jump next hunk : **N** -\u003e **\\\u003cC-n\u003e**\n *  Jump prev hunk : **P** -\u003e **\\\u003cC-p\u003e**\n\n#### Autocommand events\n\nMagit will raise some events at some point. User can plug some specific\ncommands to these events (see [example](autocommand_example).\n\n##### VimagitBufferInit\n\nThis event is raised when the magit buffer is initialized (i.e. each time\n[magit#show_magit()](magitshow_magit) is called.\n\n#### VimagitRefresh\n\nThis event is raised every time the magit buffer is refreshed, event if no\nfile is updated.\n\n#### VimagitUpdateFile\n\nThis event is raised each time a file status is updated in magit buffer\n(typically when a file or a hunk is staged or unstaged). The variable\n`g:magit_last_updated_buffer` is set to the last updated file, with its\nabsolute path.\n\n*Note:* `g:magit_last_updated_buffer` will be updated and VimagitUpdateFile event will\nbe raised only if the buffer is currently opened in vim.\n\n##### VimagitEnterCommit\n\nThis event is raised when the commit section opens and the cursor is\nplaced in this section. For example, the user may want to go straight into\ninsert mode when committing, defining this autocmd in its vimrc:\n\n```\n  autocmd User VimagitEnterCommit startinsert\n```\n\n##### VimagitLeaveCommit\n\nThis event is raised when the commit section is closed, because the user\nfinished to write its commit message or canceled it. For example, the user wants\nto set the |textwidth| of the vimagit buffer while editing a commit message,\n   defining these |autocmd| in vimrc:\n```\n  autocmd User VimagitEnterCommit setlocal textwidth=72\n  autocmd User VimagitLeaveCommit setlocal textwidth=0\n```\n\n#### Autocmd example\n\nThe following example calls the vim-gitgutter refresh function on a specific\nbuffer each time vimagit update the git status of this file.\n\n```\n  autocmd User VimagitUpdateFile\n    \\ if ( exists(\"*gitgutter#process_buffer\") ) |\n    \\ \tcall gitgutter#process_buffer(bufnr(g:magit_last_updated_buffer), 0) |\n    \\ endif\n```\n\nThe following example is already embeded in vimagit plugin (see\n[g:magit_refresh_gitgutter](gmagit_refresh_gitgutter)), then you shouldn't add this particular\nexample to your vimrc.\n\n### Options\n\nUser can define in its prefered vimrc some options.\n\n#### g:magit_show_magit_display\nChoose display setup for magit (default: 'v')\nPossible values:\n     'v': vertical split\n     'h': horizontal split\n     'c': current buffer\n\u003e let g:magit_show_magit_display='v'\n\n\n#### g:magit_enabled\n\nTo enable or disable vimagit plugin.\nDefault value is 1.\n\u003e let g:magit_enabled=[01]\n\n#### g:magit_git_cmd\n\nGit command, may be simply simply \"git\" if git is in your path. Defualt is \"git\"\n\u003e let g:magit_git_cmd=\"git\"\n\n#### g:magit_show_help\n\nTo disable chatty inline help in magit buffer (default 1)\n\u003e let g:magit_show_help=[01]\n\n#### g:magit_commit_title_limit\n\nText is grayed if first line of commit message exceed this number of character (default 50)\n\n\u003e let g:magit_commit_title_limit=[0..300]\n\n#### g:magit_default_show_all_files\n\nWhen this variable is set to 0, all diff files are hidden by default.\nWhen this variable is set to 1, all diff for modified files are shown by default.\nWhen this variable is set to 2, all diff for all files are shown by default.\nDefault value is 1.\nNB: for repository with large number of differences, display may be slow.\n\u003e let g:magit_default_show_all_files=[012]\n\n#### g:magit_default_fold_level\n\nDefault foldlevel for magit buffer.\nWhen set to 0, both filenames and hunks are folded.\nWhen set to 1, filenames are unfolded and hunks are folded.\nWhen set to 2, filenames and hunks are unfolded.\nDefault value is 1.\n\u003e let g:magit_default_fold_level=[012]\n\n#### g:magit_auto_foldopen\n\nWhen stage/unstage a hunk, cursor goes to the closest hunk in the same section.\nThis option automatically opens the fold of the hunk cursor has jump to.\nDefault value is 1.\n\u003e let g:magit_auto_foldopen=[01]\n\n#### g:magit_default_sections\n\nWith this variable, the user is able to choose which sections are displayed in magit\nbuffer, and in which order.\nDefault value:\n\u003e let g:magit_default_sections = ['info', 'global_help', 'commit', 'staged', 'unstaged']\n\n#### g:magit_warning_max_lines\n\nThis variable is the maximum number of diff lines that vimagit will display\nwithout warning the user. If the number of diff lines to display is greater than\nthis variable, vimagit will ask a confirmation to the user before refreshing the\nbuffer. If user answer is 'yes', vimagit will display diff lines as expected.\nIf user answer is 'no', vimagit will close all file diffs before refreshing.\nDefault value is 10000.\n\u003e let g:magit_warning_max_lines=val\n\n#### g:magit_discard_untracked_do_delete\n\nWhen set to 1, discard an untracked file will indeed delete this file.\nDefault value is 0.\n\u003e let g:magit_discard_untracked_do_delete=[01]\n\n#### g:magit_refresh_gitgutter\n\nWhen set to 1, and if [vim-gitgutter][2] plugin is installed, gitgutter signs will\nbe updated each time magit update the git status of a file (i.e. when a file\nor a hunk is staged/unstaged).\nDefault value is 1.\n\u003e let g:magit_refresh_gitgutter=[01]\n\n#### g:magit_auto_close\n\nWhen set to 1, magit buffer automatically closes after a commit if there is\nnothing else to stage (which means that both Staged and Unstaged sections are\nempty).\nDefault value is 0.\n\u003e let g:magit_auto_close=[01]\n\n## Requirements\n\nThis part must be refined, I don't see any minimal version for git and vim, but for sure there should be one.\n\nAt least, it is tested with vim 7.3.249 and git 1.8.5.6 (see [Integration](#integration)).\n\n## Integration\n\nBranches [master][10] and [next][11] are continuously tested on [travis][12] when published on github.\n\nvimagit is tested with various versions of vim on linux: vim 7.3.249, vim 7.4.273, and latest neovim version. It is also tested for macos X: vim, macvim and neovim. Anyway, if you feel that vimagit behaves oddly (slow refresh, weird display order...) please fill an [issue][9].\n\nFor the most enthusiastic, you can try the branch [next](https://github.com/jreybert/vimagit/tree/next). It is quite stable, just check its travis status before fetching it.\n\nTravis status:\n* **[master status][13]**: [![Master build status](https://travis-ci.org/jreybert/vimagit.svg?branch=master)][13]\n* **[next status][13]**: [![next build status](https://travis-ci.org/jreybert/vimagit.svg?branch=next)][13]\n\nA lot a features are developed in dev/feature_name branches. While it may be asked to users to test these branches (during a bug fix for example), one is warned that these branches may be heavily rebased/deleted.\n\n## Contribution guideline\n\nPull requests are very welcomed. Some good practice:\n- Make your pull request upon `next` branch\n- In case changes are asked in your PR, prefer a rebase instead of a new commit\n\n## Credits\n\n* Obviously, big credit to [Magit][1]. For the moment, I am only copying their stage workflow, but I won't stop there! They have a lot of other good ideas.\n* Sign handling is based on [vim-gitgutter][2] work.\n* Command line completion is based on [hypergit][3] work.\n\n## License\n\nCopyright (c) Jerome Reybert. Distributed under the same terms as Vim itself. See :help license.\n\n[1]: https://github.com/magit/magit\n[2]: https://github.com/airblade/vim-gitgutter\n[3]: https://github.com/c9s/hypergit.vim\n[4]: https://gitter.im/jreybert/vimagit?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge\n[5]: https://asciinema.org/a/28761\n[6]: https://youtu.be/_3wMmmVi6bU\n[7]: https://github.com/mhartington\n[8]: https://github.com/vim-airline/vim-airline\n[9]: https://github.com/jreybert/vimagit/issues/new\n[10]: https://github.com/jreybert/vimagit/\n[11]: https://github.com/jreybert/vimagit/tree/next\n[12]: https://travis-ci.org/jreybert/vimagit\n[13]: https://travis-ci.org/jreybert/vimagit/branches\n","funding_links":[],"categories":["Vim Script","Vim script"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjreybert%2Fvimagit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjreybert%2Fvimagit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjreybert%2Fvimagit/lists"}