Code Monkey home page Code Monkey logo

tag's Introduction

tag - Tag your ag and ripgrep matches

revolv++

tag is a lightweight wrapper around ag and ripgrep that generates shell aliases for your search matches. tag is a very fast Golang reimagining of sack.

tag supports ag and ripgrep (rg). There are no plans to support ack or grep. If you'd like to add support for more search backends, I encourage you to contribute!

Why should I use tag?

tag makes it easy to immediately jump to a search match in your favorite editor. It eliminates the tedious task of typing vim foo/bar/baz.qux +42 to jump to a match by automatically generating these commands for you as shell aliases.

Inside vim, vim-grepper or ag.vim is probably the way to go. Outside vim (or inside a Neovim :terminal), tag is your best friend.

Finally, tag is unobtrusive. It should behave exactly like ag or ripgrep under most circumstances.

Performance Benchmarks

tag processes ag's output on-the-fly with Golang using pipes so the performance loss is neglible. In other words, tag is just as fast as ag!

$ cd ~/github/torvalds/linux
$ time ( for _ in {1..10}; do  ag EXPORT_SYMBOL_GPL >/dev/null 2>&1; done )
16.66s user 16.54s system 347% cpu 9.562 total
$ time ( for _ in {1..10}; do tag EXPORT_SYMBOL_GPL >/dev/null 2>&1; done )
16.84s user 16.90s system 356% cpu 9.454 total

Installation

  1. Update to the latest versions of ag or ripgrep. ag in particular must be version >= 0.25.0.

  2. Install the tag binary using one of the following methods.

  3. By default, tag uses ag as its search backend. To use ripgrep instead, set the environment variable TAG_SEARCH_PROG=rg. (To persist this setting, put it in your bashrc/zshrc.)

  4. Since tag generates a file with command aliases for your shell, you'll have to drop the following in your bashrc/zshrc to actually pick up those aliases.

    • bash

      if hash ag 2>/dev/null; then
        export TAG_SEARCH_PROG=ag  # replace with rg for ripgrep
        tag() { command tag "$@"; source ${TAG_ALIAS_FILE:-/tmp/tag_aliases} 2>/dev/null; }
        alias ag=tag  # replace with rg for ripgrep
      fi
    • zsh

      if (( $+commands[tag] )); then
        export TAG_SEARCH_PROG=ag  # replace with rg for ripgrep
        tag() { command tag "$@"; source ${TAG_ALIAS_FILE:-/tmp/tag_aliases} 2>/dev/null }
        alias ag=tag  # replace with rg for ripgrep
      fi
    • fish - ~/.config/fish/functions/tag.fish

      function tag
          set -x TAG_SEARCH_PROG ag  # replace with rg for ripgrep
          set -q TAG_ALIAS_FILE; or set -l TAG_ALIAS_FILE /tmp/tag_aliases
          command tag $argv; and source $TAG_ALIAS_FILE ^/dev/null
          alias ag tag  # replace with rg for ripgrep
      end

Configuration

tag exposes the following configuration options via environment variables:

  • TAG_SEARCH_PROG
    • Determines whether to use ag or ripgrep as the search backend. Must be one of ag or rg.
    • Default: ag
  • TAG_ALIAS_FILE
    • Path where shortcut alias file will be generated.
    • Default: /tmp/tag_aliases
  • TAG_ALIAS_PREFIX
    • Prefix for alias commands, e.g. the e in generated alias e42.
    • Default: e
  • TAG_CMD_FMT_STRING
    • Format string for alias commands. Must contain {{.Filename}}, {{.LineNumber}}, and {{.ColumnNumber}} for proper substitution.
    • Default: vim -c 'call cursor({{.LineNumber}}, {{.ColumnNumber}})' '{{.Filename}}'

License

MIT

Author

aykamko

tag's People

Contributors

acoffman avatar alok avatar aykamko avatar dmarcoux avatar keith avatar

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.