🦎 A NeoVim plugin for highlighting visual selections like in a normal document editor!

Overview

🦎 HighStr.nvim

A NeoVim plugin for highlighting visual selections like in a normal document editor!

Repository's starts Issues License
Say thanks Latest commit GitHub repository size

Demo


TL;DR

HighStr.nvim is a NeoVim plugin written in Lua that aims to provide a the simple functionality of highlighting text like one would do in a normal document editor. To use it, install it with your favorite plugin manager, select something in visual mode and then run :HSHighlight. You can also add keybindings to the commands.

🌲 Table of Contents

🎁 Features

  • Highlight visual selection in any given pre-defined color.
  • Remove highlighting from lines in visual selection.
  • Users can set up foreground and background of any color.
  • Has a "smart" option to set foreground based on background.
  • Users can add any amount of colors.
  • Produce a verbose output for debugging (optional).
  • Export and import highlights!

πŸ“Ί Notices

Checkout the CHANGELOG.md file for more information on the notices below:

  • 16-08-21: Fixed #6: properly highlight imported highlights.
  • 30-07-21: Feat #1: import and export highlights!
  • 26-05-21: Fixed bug that prevented adding new colors and added option to remove all highlighting from the current buffer
  • 25-05-21: Just released!

πŸ“¦ Installation

Prerequisites

  • NeoVim nightly (>=v0.5.0)
  • A nice color scheme to complement your experience ;)

Adding the plugin

You can use your favorite plugin manager for this. Here are some examples with the most popular ones:

Vim-plug

Plug 'Pocco81/HighStr.nvim'

Packer.nvim

use "Pocco81/HighStr.nvim"

Vundle

Plugin 'Pocco81/HighStr.nvim'

NeoBundle

NeoBundleFetch 'Pocco81/HighStr.nvim'

Setup (configuration)

As it's stated in the TL;DR, there are already some sane defaults that you may like, however you can change them to match your taste. These are the defaults:

verbosity = 0,
saving_path = "/tmp/highstr/",
highlight_colors = {
	color_0 = {"#0c0d0e", "smart"},	-- Cosmic charcoal
	color_1 = {"#e5c07b", "smart"},	-- Pastel yellow
	color_2 = {"#7FFFD4", "smart"},	-- Aqua menthe
	color_3 = {"#8A2BE2", "smart"},	-- Proton purple
	color_4 = {"#FF4500", "smart"},	-- Orange red
	color_5 = {"#008000", "smart"},	-- Office green
	color_6 = {"#0000FF", "smart"},	-- Just blue
	color_7 = {"#FFC0CB", "smart"},	-- Blush pink
	color_8 = {"#FFF9E3", "smart"},	-- Cosmic latte
	color_9 = {"#7d5c34", "smart"},	-- Fallow brown
}

The way you setup the settings on your config varies on whether you are using vimL for this or Lua.

For init.lua

local high_str = require("high-str")

high_str.setup({
	verbosity = 0,
	saving_path = "/tmp/highstr/",
	highlight_colors = {
		-- color_id = {"bg_hex_code",<"fg_hex_code"/"smart">}
		color_0 = {"#0c0d0e", "smart"},	-- Cosmic charcoal
		color_1 = {"#e5c07b", "smart"},	-- Pastel yellow
		color_2 = {"#7FFFD4", "smart"},	-- Aqua menthe
		color_3 = {"#8A2BE2", "smart"},	-- Proton purple
		color_4 = {"#FF4500", "smart"},	-- Orange red
		color_5 = {"#008000", "smart"},	-- Office green
		color_6 = {"#0000FF", "smart"},	-- Just blue
		color_7 = {"#FFC0CB", "smart"},	-- Blush pink
		color_8 = {"#FFF9E3", "smart"},	-- Cosmic latte
		color_9 = {"#7d5c34", "smart"},	-- Fallow brown
	}
})

For init.vim

lua << EOF
local high_str = require("high-str")


high_str.setup({
	verbosity = 0,
	saving_path = "/tmp/highstr/",
	highlight_colors = {
		-- color_id = {"bg_hex_code",<"fg_hex_code"/"smart">}
		color_0 = {"#0c0d0e", "smart"},	-- Cosmic charcoal
		color_1 = {"#e5c07b", "smart"},	-- Pastel yellow
		color_2 = {"#7FFFD4", "smart"},	-- Aqua menthe
		color_3 = {"#8A2BE2", "smart"},	-- Proton purple
		color_4 = {"#FF4500", "smart"},	-- Orange red
		color_5 = {"#008000", "smart"},	-- Office green
		color_6 = {"#0000FF", "smart"},	-- Just blue
		color_7 = {"#FFC0CB", "smart"},	-- Blush pink
		color_8 = {"#FFF9E3", "smart"},	-- Cosmic latte
		color_9 = {"#7d5c34", "smart"},	-- Fallow brown
	}
})
EOF

For instructions on how to configure the plugin, check out the configuration section.

Updating

This depends on your plugin manager. If, for example, you are using Packer.nvim, you can update it with this command:

:PackerUpdate

πŸ€– Usage (commands)

All the commands follow the camel casing naming convention and have the HS prefix so that it's easy to remember that they are part of the HighStr.nvim plugin. These are all of them:

Default

  • :HSHighlight <integer>: highlights current visual selection and receives an <integer> that indicates which colors to use from the highlight_colors = {} table; if none is given, HighStr.nvim will pick color_1.
  • :HSRmHighlight <rm_all>: If the rm_all argument is given, removes all the highlighting in the current buffer. If not, does the same but for every line in visual selection.
  • :HSExport: exports highlights from the current session to <saving_path>. This command overrides previously saved highlights, so you may also use it for clearing them.
  • :HSImport: imports highlights from <saving_path>.

🐬 Configuration

Although settings already have self-explanatory names, here is where you can find info about each one of them and their classifications!

General

This settings are unrelated to any group and are independent.

  • verbosity: (Integer) if greater that zero, enables verbose output (print what it does when you execute any of the two command).
  • saving_path: (String) path to a directory for saving the highlights when they get exported. The directory shouldn't necessarily exist, however, the only condition is that it must end with a forward slash the path you give (/).

Highlight Colors

The table highlight_colors = {} contains all of the colors HighStr.nvim will use when you highlight something. The convention is simple: color_<a_number>. Each color is a table in which the first element represents the background of the color (the highlight it self), and the second one represents the foreground (the color of the text that's being highlighted). The second parameter may also be the word "smart", to change the color of the foreground based on the background in order to get a better contrast (e.g. if background is white, set foreground to black). Here is an example:

color_1 = {"#FFF9E3", "smart"}

Here we are setting a cool color called Cosmic Latte (looks like white), that we are assigning to color_1 and we are giving its parameters to a table: the first one is the highlight itself ("#FFF9E3") and in the second one ("smart") we are telling it to set a foreground that will make contrast with the background (black in this case).

Conditions:

  • The numbers that are assigned to the colors (e.g. color_2) should not be repeated, because it's what you'll use to "call" that highlight color.
  • The color it self (argument one in a color's table) should be in its hex value.

🧻 Key-bindings

There are no default key-bindings. However, you can set them on your own as you'd normally do! Here is an example mapping <F3> to highlight stuff and <F4> to remove the highlighting:

For init.lua

vim.api.nvim_set_keymap(
    "v",
    "<F3>",
    ":<c-u>HSHighlight 1<CR>",
    {
        noremap = true,
        silent = true
    }
)

vim.api.nvim_set_keymap(
    "v",
    "<F4>",
    ":<c-u>HSRmHighlight<CR>",
    {
        noremap = true,
        silent = true
    }
)

For init.vim

vnoremap <silent> <f3> :<c-u>HSHighlight 1<CR>
vnoremap <silent> <f4> :<c-u>HSRmHighlight<CR>

πŸ™‹ FAQ

  • Q: "What if I repeat a color's number?"

  • A: There would a conflict when calling :HSHighlight, however it will try and call any of those colors.

  • Q: "How can I view the doc from NeoVim?"

  • A: Use :help HighStr.nvim

πŸ«‚ Contribute

Pull Requests are welcomed as long as they are properly justified and there are no conflicts. If your PR has something to do with the README or in general related with the documentation, I'll gladly merge it! Also, when writing code for the project you must use the .editorconfig file on your editor so as to "maintain consistent coding styles". For instructions on how to use this file refer to EditorConfig's website.

πŸ’­ Inspirations

The following projects inspired the creation of HighStr.nvim. If possible, go check them out to see why they are so amazing :]

πŸ“œ License

HighStr.nvim is released under the GPL v3.0 license. It grants open-source permissions for users including:

  • The right to download and run the software freely
  • The right to make changes to the software as desired
  • The right to redistribute copies of the software
  • The right to modify and distribute copies of new versions of the software

For more convoluted language, see the LICENSE file.

πŸ“‹ TO-DO

High Priority

  • Store and Restore highlights on a per-file basis

Low Priority

  • Add tab completion to get more than 10 numbers.

Enjoy!

Owner
Pocco81
Under dev dev
Pocco81
A terminal tool for git. When we use git, do you feel very uncomfortable with too long commands

PIGIT A terminal tool for git. When we use git, do you feel very uncomfortable with too long commands. For example: git status --short, this project c

Zachary 1 Apr 09, 2022
Dart Version Manager CLI implemented with Python and Typer.

Dart Version Manager Dart Version Manager CLI implemented with Python and Typer Usage: $ dvm [OPTIONS] COMMAND [ARGS]... Options: --install-completion

EducUp 6 Jun 26, 2022
A command line tool to hide and reveal information inside images (works for both PNGs and JPGs)

ImgReRite A command line tool to hide and reveal information inside images (work

Jigyasu 10 Jul 27, 2022
Tools hacking termux in the name ant-attack

Hello friends, I am ama.player0000. Web developer, software, Android command line (termux). (1)=Well, ant-attack tool is a tool to attack sites and disable them. (2)=You can use those CCTV servers, s

ΰΌΊAMA.PLAYERΰΌ» 1 Dec 17, 2021
This CLI give the possibility to do a queries in Star Wars API and returns a JSON in a terminal.

Star Wars CLI (swcli) This CLI give the possibility to do a queries in Star Wars API and returns a JSON in a terminal. Install $ pip install swcli Qu

Pery Lemke 5 Nov 05, 2021
Tool for HackMyVM platform

HMV-cli It is a tool for the HackMyVM platform. With this tool you will be able to see the machines you have pending, filter by difficulty, download d

bitc0de 11 Sep 19, 2022
Tools crack instagram + fb ayok dicoba keburu premium 😁

FITUR INSTALLASI [1] pkg update && pkg upgrade [2] pkg install git [3] pkg install python [4] pkg install python2 [5] pkg install nano [6]

Jeeck 1 Dec 11, 2021
dotfilery, configuration, environment settings, automation, etc.

β”Œβ”¬β”β”Œβ”€β”β”Œβ”€β”β”Œβ”€β”β”¬ β”¬β”Œβ”¬β”β”¬ β”¬β”¬β”Œβ”€β” β”‚β”‚β”‚β”œβ”€ β”‚ β”¬β”œβ”€β”€β”‚ β”‚ β”‚ β”œβ”€β”€β”‚β”‚ :: bits & bobs, dots & things. β”΄ β”΄β””β”€β”˜β””β”€β”˜β”΄ β”΄β”΄β”€β”˜β”΄ β”΄ β”΄ β”΄β”΄β””β”€β”˜ @megalithic πŸš€ Instal

Seth Messer 89 Dec 25, 2022
Declarative CLIs with argparse and dataclasses

argparse_dataclass Declarative CLIs with argparse and dataclasses. Features Features marked with a βœ“ are currently implemented; features marked with a

Mike DePalatis 29 Dec 06, 2022
Turdshovel is an interactive CLI tool that allows users to dump objects from .NET memory dumps

Turdshovel Description Turdshovel is an interactive CLI tool that allows users to dump objects from .NET memory dumps without having to fully understa

Leron Gray 41 Jul 27, 2022
Dynamically Generate GitHub Stats as like Terminal Interface

GitHub Stats Terminal Style Dynamically Generate GitHub Stats as like Terminal Interface Usage Create a New Repository using this Template or click he

YOGESHWARAN R 63 Jan 03, 2023
Pequeno joguinho pra vocΓͺ rodar no seu terminal

JokenPython Pequeno joguinho pra vocΓͺ rodar no seu terminal OlΓ‘! Joguinho legal pra vc rodar no seu terminal!! (rode no terminal, pra melhor experienc

Scott 4 Nov 25, 2021
A command line tool made in Python for the popular rhythm game

osr!name A command line tool made in Python for the popular rhythm game "osu!" that changes the player name of a .osr file (replay file). Example: Not

2 Dec 28, 2021
A user-friendly python CLI for Fmask 4.3 software (GERS Lab, UCONN).

pyFmask What is pyFmask pyFmask is a user-friendly python CLI for Fmask 4.3 software (GERS Lab, UCONN; https://github.com/GERSL/Fmask). Fmask (Zhu et

1 Jan 05, 2022
A super simple terminal command shortener 🐟

pcmd A super simple terminal command shortener 🐟 Source code : https://github.com/j0fiN/pcmd Documentation : https://j0fin.github.io/pcmd About Durin

9 Mar 02, 2022
Shortcut-Maker - It is a tool that can be set to run any tool with a single command

Shortcut-Maker It is a tool that can be set to run any tool with a single command Coded by Dave Smith(Owner of Sl Cyber Warriors) Command list πŸ‘‡ pkg

Dave Smith 10 Sep 14, 2022
A supercharged AWS command line interface (CLI).

SAWS Motivation AWS CLI Although the AWS CLI is a great resource to manage your AWS-powered services, it's tough to remember usage of: 70+ top-level c

Donne Martin 5.1k Jan 05, 2023
Faza - Faza terminal, Faza help to beginners for pen testing

Faza terminal simple tool for pen testers Use small letter only for commands Don't use space after command 'help' for more information Installation gi

Ag3ntQ 5 Feb 20, 2022
Module for converting 2D Python lists to fancy ASCII tables. Table2Ascii lets you display pretty tables in the terminal and on Discord.

table2ascii Module for converting 2D Python lists to a fancy ASCII/Unicode tables table2ascii πŸ“₯ Installation πŸ§‘β€πŸ’» Usage Convert lists to ASCII table

Jonah Lawrence 40 Jan 03, 2023
Wordle-textual - Play Wordle from the CLI, using Textual

Wordle, playable from the CLI This project seeks to emulate Wordle in your shell

PhenoM4n4n 3 Mar 29, 2022