Giter Club home page Giter Club logo

vim-signify's Introduction

NEWS: Sy is pretty stable at the moment, so there will be no commits (apart from bugfixes/feature requests) in the next ~month. I'm mainly working at Sy 2.0 at the moment. Stay tuned! :-)

vim-signify

Or just: sy

Sy shows all added, deleted and modified lines since the last commit via Vim its sign column. It supports several version control systems.

It's fast, highly configurable and well documented.

Features:

  • supports git, mercurial, darcs, bazaar, subversion, cvs, rcs, fossil

  • quick jumping between changed lines

  • apart from signs there is also optional line highlighting

  • fully configurable through global variables (options and mappings)

  • optional preserving of signs from other plugins

  • you can toggle the plugin per buffer

  • skip certain filetypes and filenames

  • good documentation

  • quick developer response! :-)

Example:signify in action

Limits exist only in your mind!

Feedback, please!

If you use any of my plugins, star it on github. This is a great way of getting feedback! Same for issues or feature requests.

Thank you for flying mhi airlines. Get the Vim on!

What about vim-gitgutter?

To be honest, I don't understand why people always compare plugins like Sy to vim-gitgutter. I understand that it is by far the most known one, but primarily because it was featured on the Hacker News frontpage.

Don't get me wrong, I don't intend to badmouth gitgutter, I even contributed to it once. (Granted, it was only a small fix.) And I'm glad about everyone contributing to the Vim community, but there are two important facts one should consider:

  1. There were other plugins providing the same functionality as gitgutter years before its creation.

  2. Sy provides a superset of gitgutter.

So here is the short answer: The main difference is Sy its support for version control systems other than git. Moreover, two of its design goals are speed and high configurability.

Sign explanation

+

A new line was added. The sign is shown on the same line as the new line.

_1

A line was deleted. The sign is shown on the line above the deleted line. The second character indicates the number of deleted lines: 1-9, and # for everything above.

!

A line was changed. Something was changed, but the amount of lines stayed the same. The sign is shown on the same line.

!_

A line was changed and one or more of the lines below were deleted. A combination of ! and _. The sign is shown on the same line.

This is used instead of _ in the special case of the first line being removed.

Longer introduction

supports several version control systems

This plugin is based on the diffing features of the supported version control systems. Since not all VCS support the same options, sometimes we have to fall back to the 'diff' executable.

Currently the following VCS are supported:

  • git
  • mercurial (hg)
  • bazaar (bzr)
  • darcs
  • subversion (svn)
  • cvs
  • rcs
  • fossil

quick jumping between changed lines

There are mappings for jumping forth and back between blocks of changes (so-called hunks). The following example shows the default mappings and how to change them:

let g:signify_mapping_next_hunk = '<leader>gj'
let g:signify_mapping_prev_hunk = '<leader>gk'

Note: In case you don't know about the mapleader, have a look at :h mapleader. The default is the '' button.

Following Vim conventions you can also use ]c and [c.

apart from signs there is also optional line highlighting

Sy shows you signs for changed lines. Moveover, you can enable highlighting of the concerned lines:

let g:signify_mapping_toggle_highlight = '<leader>gh'

you can toggle the plugin per buffer

In case you want to disable the plugin for the current buffer, you can toggle it:

let g:signify_mapping_toggle = '<leader>gt'

skip certain filetypes and filenames

If you want to disable Sy for certain kinds of filename or file types, you explicitely have to create "skip dicts":

Example:

let g:signify_skip_filetype = { 'vim': 1, 'c': 1 }
let g:signify_skip_filename = { '/home/user/.vimrc': 1 }

NOTE: Filenames have to be absolute paths!

good documentation

You should know by now!

Installation

If you have no preferred installation method, I suggest using tpope's pathogen:

  1. git clone https://github.com/tpope/vim-pathogen ~/.vim/bundle/vim-pathogen
  2. mkdir -p ~/.vim/autoload && cd ~/.vim/autoload
  3. ln -s ../bundle/vim-pathogen/autoload/pathogen.vim

Afterwards installing Sy is as easy as pie:

  1. git clone https://github.com/mhinz/vim-signify ~/.vim/bundle/vim-signify
  2. start Vim
  3. :Helptags
  4. :h signify

Documentation

:h signify

Configuration

NOTE: The shown assignments are only examples. You can find the default values in the help.

For more info: :h signify-options

let g:signify_vcs_list = [ 'git', 'hg' ]

let g:signify_difftool = 'gnudiff'

let g:signify_mapping_next_hunk = '<leader>gj'
let g:signify_mapping_prev_hunk = '<leader>gk'

let g:signify_mapping_toggle_highlight = '<leader>gh'
let g:signify_mapping_toggle           = '<leader>gt'

let g:signify_skip_filetype = { 'vim': 1, 'c': 1 }
let g:signify_skip_filename = { '/home/user/.vimrc': 1 }

let g:signify_sign_overwrite = 1

let g:signify_update_on_bufenter = 1

let g:signify_line_highlight = 1

let g:signify_sign_add               = '+'
let g:signify_sign_delete            = '-'
let g:signify_sign_change            = '*'
let g:signify_sign_change_delete     = '*_'
let g:signify_sign_delete_first_line = ''

let g:signify_cursorhold_normal = 1
let g:signify_cursorhold_insert = 1

Author

Marco Hinz <[email protected]>

License

Copyright © Marco Hinz. Distributed under the same terms as Vim itself. See :help license.

vim-signify's People

Contributors

mhinz avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

mishrasidhant

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.