Skip to content

Instantly share code, notes, and snippets.

@GothAck GothAck/.zshrc
Last active Jan 1, 2016

What would you like to do?
Adding to the GIT Index with Sublimerge
function sli () {
if [ -z "$1" ] || [ "$1" = "-h" ]; then
echo "sli - Sublimerge add to GIT index"
echo "Usage:"
echo "sli [options] {path to file}"
echo "Call this function in the root of the GIT working tree after using the custom Sublimerge comparison"
return 0
git show :"$GIT_FILE" |\
git diff --no-index -- - "$TEMP_FILE" |\
sed 's|^diff --git.*$|'"diff --git a/$GIT_FILE b/$GIT_FILE"'|' |\
sed '/^\(---\|+++\)/s|^\(.\{5\}\).*|\1/'"$GIT_FILE"'|' |\
git apply --cached --verbose;
if [ "$?" -gt "0" ]; then
echo "There were no changes to add to the git index"
git diff --cached --stat "$GIT_FILE" | cat
# rm "$TEMP_FILE"
"custom_comparisons": [
/************************************* GIT *************************************/
* Custom Git comparison. Displays quick panel with modified files and allows to compare working copy to HEAD to see uncommited changes.
"name": "Show uncommited changes (index)...", //comparison name
"requires": "git", //What does it require. Currently 'git', 'svn' 'hg' or null (if doesn't require any of VCS)
"steps": [ //comparison is divided into steps. You can define more steps when needed.
"quick_panel": { //Displays a Quick Panel with given attributes
"name": "modified_file", //Quick Panel name. Used to populate a variable 'modified_file' with seleted item value
"source": { //Data source
"execute": { //Execute a shell command
"command": "{config:git_executable_path} status --porcelain --untracked-files=no",
"directory": "{sublimerge:repo_root}" //Set a command working directory
"item": { //Single item extractor
"regexp": "^\\s+M\\s+\"?(.*?)\"?$", //Regular expression to parse each output line
"caption": ["@1"], //Caption is an array. Each item is another line. @n - placeholder for regular expression match
"value": "@1" //Value must be a single string
"empty_message": "There are no uncommited changes" //Message to be displayed when data source is empty (no items created)
{ //define variables
"define": {
"right_file": "{sublimerge:repo_root}/{modified_file}",
// Custom tmp path including sublimerge so we don't accidentally clobber other tmp files
"left_file": "{sublimerge:temp_dir}/sublimerge/{modified_file}@HEAD"
"compare": { //Executes file comparison
"execute": { //Execute a shell command. Please note about 'modified_file' variable which we defined in previous step
// Note the mkdir
"command": "mkdir -p \"{left_file|dirname}\" ;{config:git_executable_path} show :\"./{modified_file}\" > \"{left_file}\"",
"directory": "{sublimerge:repo_root}"
"left": { //Left file
"file": "{left_file}", //Full file path
"temporary": false // Keep tmp left_file so we can add it's difference to the git index
"right": {
"file": "{right_file}",
"temporary": false //This file is our working copy, so is not temporary

This comment has been minimized.

Copy link

commented Dec 24, 2013

Nice :) But you should put your custom comparison into Custom Comparisons - User file to prevent it from being overridden each time Sublimerge is upgraded. When putting it in User file, change the root key name to "custom_comparisons_user", so the file will look like "custom_comparisons_user": [ ]


This comment has been minimized.

Copy link
Owner Author

commented Dec 25, 2013

Huh, it's in the Custom Comparisons - User file, however I'd not read the documentation and had copied the custom_comparisons key from the Default file >_<

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.