spacemacs/layers/+source-control/version-control
duianto 677c06c759 [version-control] Smerge TS formatting
Capitalize title and column headers.

Reduce two to one space between the key and description in the first column.
Rename and separate "move up/down" to "next line" and "prev line", to reduce the
first columns width, and to make it clear that it doesn't move the hunks.

Reduce four to two spaces between the first and second columns.

Rename "combine with next" to "join curr/next hunk" to indicate that the
hunks/conflicts are combined and not just of the versions.

Add a new column: Diff
Remove "diff" and "to" from diff key descriptions, to reduce the column width.
Move refine from the Other column to the new Diff column.
2019-04-20 13:00:05 +02:00
..
config.el Happy New Year 2018! 2018-01-04 02:00:25 -05:00
funcs.el [vcs] Inhibit auto-indentation after reverting hunks 2019-04-18 23:16:08 +02:00
keybindings.el Adapt for Magit's move to Transient 2019-02-16 10:21:45 -05:00
packages.el [version-control] Smerge TS formatting 2019-04-20 13:00:05 +02:00
README.org documentation formatting: Wed Dec 5 03:03:03 UTC 2018 2018-12-04 22:06:14 -05:00

Version-Control layer

Description

This layers adds general configuration for Emacs VC. It should work with all VC backends such as Git, Mercurial, Bazaar, SVN, etc…

Features:

  • highlights uncommitted changes in the fringe or margin with diff-hl, git-gutter, or git-gutter+
  • adds vcs transient-state SPC g. to allow quick navigation and modification of buffer hunks.

Install

Layer

To use this configuration layer, add it to your ~/.spacemacs. You will need to add version-control to the existing dotspacemacs-configuration-layers list in this file.

Configuration

You can choose the package to facilitate the diff transient-state and show margins by setting version-control-diff-tool

  '(version-control :variables
                    version-control-diff-tool 'diff-hl)

You can choose the side on which the diff appears (by default its the right side)

  '(version-control :variables
                    version-control-diff-side 'left)

To automatically enable diff margins in all buffers, set version-control-global-margin

  '(version-control :variables
                    version-control-global-margin t)

Differences between margin programs

This layer contains generalized mappings for three diff margin packages: diff-hl, git-gutter, and git-gutter+.

There are some differences between packages that might have some people prefer one over the other:

Feature diff-hl git-gutter git-gutter+
Show in fringe X X X
Extended VCS support (e.g. hg, svn) X X
Stage hunks from buffer X X
Dired support X

Key bindings

VC commands:

Key binding Description
SPC g . version control transient-state
SPC g r smerge mode transient-state
SPC g h o browser at remote
SPC g v = open a hunk under the point in the diff buffer
SPC g v D compare the entire working tree with head
SPC g v e show diff against current head using ediff
SPC g v g visually annotate the current file
SPC g v d open the VC Directory buffer
SPC g v + update the working copy
SPC g v i register (add) into a version control system
SPC g v u revert working copy to their repository contents
SPC g v l list the change log
SPC g v L list the change log for the current VC controlled tree
SPC g v v do the next logical VC operation (vc-next-action)
SPC g v I ignore file (vc-ignore)
SPC g v r resolve conflicts in file

VC Directory buffer commands

You can hit SPC pv from the current project to open the VC Directory buffer, or use SPC g v d for specifying a root directory. Then you may mark (m key) files you are interested in, to form a fileset. Most commands described above are applicable to filesets too. To some of them are given shortcuts:

Key Description
= compare selected files with head
c open a commit message buffer
l list changes
a annotate selected files
i add into a version control system
r refresh directory view
E ignore file under cursor

Navigation and interaction commands in the VC Directory buffer:

Key bindings Description
j or M-n next file
k or M-p previous file
gj or TAB next directory
gk or S-TAB previous directory
m mark a file
u unmark a file

Commit message editing buffer

In a commit message buffer press C-c C-c to commit the changes with the entered message. Pressing C-c C-k will discard the commit message and close this buffer.

Diff mode

Key bindings Description
SPC m a apply a hunk
SPC m d kill the hunk at point
SPC m D kill the current files hunk
SPC m e call ediff-patch-file on current buffer
SPC m f c convert unified diffs to context diffs
SPC m f r reverse the direction of the diffs
SPC m f u convert context diffs to unified diffs
SPC m g jump to the corresponding source line
SPC m j next hunk
SPC m J next file
SPC m k previous hunk
SPC m K previous file
SPC m q close the diff window
SPC m r revert a hunk
SPC m s split the current hunk at point into two hunks
SPC m u undo

A transient buffer is also defined, start it with SPC m . or , .

Key bindings Description
j next hunk
J next file
k previous hunk
K previous file

Log view buffer

Key bindings Description
C-j or M-n next message
C-k or M-p previous message
gj or J or TAB next file
gk or K or S-TAB previous file
f or ENTER visit the version at point
d display a diff between the revision at point and the next earlier revision
o use for jumping to links
H toggle hiding of the full message

Annotation buffer

Key bindings Description
J visit the annotation of the revision after this one
K visit the annotation of the revision previous to this one
L Visit the log of the revision at line
H toggle whether or not the annotation is visible
a visit the annotation of the revision identified in the current line
p visit the annotation of the revision before the revision at line
d display the diff between the current lines revision and the previous revision
f show in a buffer the file revision indicated by the current line

Version Control Transient-state

Use SPC g . to enter a transient state for quickly navigating between hunks in a buffer. During that state, the following bindings are active:

Key binding Description
h Show diff of hunk
n Next hunk
N or p Previous hunk
r Revert hunk
s Stage hunk
t Toggle margin indicators
w Stage file
u Unstage file
d Repo diff popup
D Show diffs of unstaged hunks
c Commit with popup
C Commit
P Push repo with popup
f Fetch for repo with popup
F Pull repo with popup
l Show repo log
z Recenter buffer in window

Smerge Mode Transient-state

Key binding Description
SPC g r n Next hunk
SPC g r N Previous hunk
SPC g r p Previous hunk
SPC g r j Go to next line
SPC g r k Go to previous line
SPC g r b Smerge keep base
SPC g r m Smerge keep mine
SPC g r a Smerge keep all
SPC g r o Smerge keep other
SPC g r c Smerge keep current
SPC g r C Smerge combine with next
SPC g r u Undo
SPC g r r Smerge refine
SPC g r q Quit transient state

Toggles

Key binding Description
SPC T d toggle diff margins
SPC T C-d toggle diff margins globally