Code Monkey home page Code Monkey logo

splice9's Introduction

Splice9

Splice9 plugin for resolving three-way merges; it runs on Vim9.1.
It's inspired by Adobe Lightroom's user interface.
Watch the demo screencast

Splice9 is pure vim9script port of Steve Losh's Splice which is a vimscript/python hybrid.

In vim do :he Splice. Recommended at least once.

See Dynamic HUD below for a description of new features in Splice9.

Typically Splice9 is started by your VCS. When it starts up, you can do

  1. cycle diffs
  2. next conflict
  3. use hunk to put the chosen hunk into the Result file
  4. edit Result as needed
  5. Either save-quit or error-exit to abort the merge

Try chosing the different modes and doing cycle layouts and cycle diffs; see the various ways the files and diffs are displayed.

VCS Support

Once you've installed Splice you'll need to configure your version control system to use it as a merge tool.

In the vim startup arguments, you can do addional things such as setting the width with -c "set columns=220".

Mercurial

Add the following lines to ~/.hgrc:

[merge-tools]
splice.executable = gvim
splice.args = -f $base $local $other $output -c 'Splice9Init'
splice.premerge = keep
splice.priority = 1

Note: replace gvim with mvim if you're on Mac, or just plain vim if you prefer to keep the editor in the console.

Git

Add the following lines to ~/.gitconfig:

[merge]
tool = splice

[mergetool "splice"]
cmd = "gvim -f $BASE $LOCAL $REMOTE $MERGED -c 'Splice9Init'"
trustExitCode = true

Note: replace gvim with mvim if you're on Mac, or just plain vim if you prefer to keep the editor in the console.

Bazaar

For Bazaar 2.4 or greater, add the following line to bazaar.conf:

bzr.mergetool.splice = gvim {base} {this} {other} {result} -c 'Splice9Init'

Optionally, change the default merge tool by setting:

bzr.default_mergetool = splice

For earlier versions of Bazaar, set the following entry in bazaar.conf:

external_merge = gvim %b %t %o %r -c 'Splice9Init'

Note: replace gvim with mvim if you're on Mac, or just plain vim if you prefer to keep the editor in the console.

Dynamic HUD

Some of the Splice9 UI enhancements:

  • Additional status info (compact) in the HUD (Heads Up Display).
  • The action buttons in the HUD are clickable.
  • Rollover highlight for active HUD buttons.
  • Click for popup of shortcuts.
  • Can specify each action's ":map"/shortcut individually.
  • Can set "use meta" and the meta key is used instead of using g:mapleader.
  • Version control system configuration the same as original Splice.

Heads Up Display

This page describes capability/status available in the Splice9 HUD that is not available in the original Splice. In vim do :help splice to learn about the HUD.

Here is the left part of the HUD which illustrates the additional status.

The HUD

Much of the Splice9 HUD is active. The active items are in bold. When the cursor moves over an active command it is highlighted. n: next conflict in the image shows this highlighting. When an active command is highlighted, press the mouse button to execute the command. Note that there are keyboard shortcuts for all the commands.

Splice Modes:

This region shows the current mode; *[p]ath in this example is highlighted. The modes act as commands, click on a mode and that mode is entered. Each mode has it's own set of layouts available.

Layout:

This region shows the arrangement of the open windows and which file/buffer is loaded into the window. When Splice9 is diffing files, the files participating in the diff are highlighted; they are Original and One in this example.

Splice Commands:

Splice Commands

The label of this region, Splice Commands:, is active. Click on it to display a popup which has each command with its associated keyboard shortcut.

There's a Splice Commands Shortcuts Screenshot

D: diffs off

The command D: diffs off has embedded status information. When Splice9 is diffing files there is a * displayed after the D:; this is shown in the image above. When the * is displayed, clicking on this command (or using the shortcut), turns off diffing. When diffing is turned off, this command returns to the previously active diff state.

See

s: toggle scrollbind

The command s: toggle scrollbind also has a * indicator; it means that scrollbind is on. Note that scrollbind automatically goes on when diffing, the files that participate in the diff are in scrollbind. When not diffing, click on scrollbind so displayed files scroll together.

Diff Options

Click on Diff Options to bring up a property sheet dialog. Use it to change

  • some of vim's 'diffopt' settings
  • Splice9's wrap setting
  • wrap for open windows without changing any settings

There's a Diff Options Screenshot

configuration

You can tweak the behavior of Splice9 by setting variables in your vimrc file; the old Splice global variable names work with Splice9. However that method is deprecated and using the g:splice_config dictionary is preferred. :help SpliceConfig

Splice9 has new configurion options to handle some of the new features. In particular

  • For shortcuts, the Alt/Meta key can be used instead of a prefix.

    :help SpliceConfig_alt

  • Each command can be explicityly mapped.

    :help SpliceConfig_command

  • The various hightlights are configurable.

    :help SpliceConfig_highlights

splice9's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

splice9's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.