Remap caps lock key to escape with uncap

I use both Windows and Linux. On Linux, I have mapped the caps lock key to the escape key via the xmodmap command. On Windows, there's no xmodmap command so I went searching and found Uncap.

Uncap is a tiny standalone exe program that when run, remaps caps to esc. It takes about a week to get used to the new key but the result is life-changing. You can now cancel actions with a quick pinky micro-movement rather than a giant leap across half the keyboard.

Put it in your startup.bat and see you next time!

Vim plugins that I use

This is an alphabetical list of vim plugins that I use.


In C or C++ projects, source and header files often come in pairs. For example, there's utils.c and utils.h and you often need to edit both files at the same time. With Alternate, you can type the :A command and it will quickly switch between .c and .h files. If you're in a .c file, it will switch to the .h file, and if you're in a .h file, it will switch to the .c file.


There are two operators to search for the word under the cursor. They are * (search forward) and # (search backward). Unfortunately, in visual mode, they don't search for the visual selection and you can't search for a word with special characters in it. For example, if the word is h#e#l#l#o, then these operators will pick and search one of the letters in this word and that's not what you want.

With this plugin, you can search the visually selected sequence and it can contain any special characters. Use the v command to make a selection and then press * or # to search.

Additionally, this plugin keeps the cursor position across matches. For example, if the cursor is on the letter d of the word index, then after pressing *, the cursor will jump to the letter d of the next index match. Without this plugin, vim would jump to the first letter of the next match.


To work efficiently with multiple files, you need to use several different commands, such as :ls (list buffers), :b (edit a buffer), :bn (next buffer), and :bp (previous buffer). Usually, however, you spend most of your time just typing :bn, :bn, :bn, until you find the right file.

Bufexplorer makes working with multiple files in vim a breeze. It adds the \be key binding (\ is the leader key) that opens a list of all buffers and it lets you quickly switch to another buffer by moving to the line that shows the filename and pressing enter.


Many vim commands are inherited from vi and their output is very primitive. They print the output to the screen and you can't search or copy. If you press the space one too many times, the content disappears. It's nearly impossible to search this text and sometimes you don't even know how to make vim display it again.

Bufferize solves this problem. It takes a vim command and creates a temporary buffer from its output and opens it in a split window. For example, :Bufferize map will show all keyboard mappings in a new window and you can search them. To exit the new window, just use the regular :q command.


Bufferline complements Bufexplorer (above) and makes it even easier to work with multiple files/buffers. It prints a list of all open files together with their buffer numbers in the status line. You can just glance at this list and type :b 5 to switch to the 5th file/buffer or use Bufexporer and hit \be followed by /5 and enter.


If you have two buffers open in a split and you want to close a buffer, you can use the :bd command. Unfortunately, this command also closes the split. Often, you don't want to close the split and want to just close the buffer. In this case, use Buffkill's :BD command, which will close the buffer but leave the split open.


Characterize adds the ga shortcut that shows the name of the Unicode character under the cursor, its code point value, and hex value.


This extension improves the f and F shortcuts that are used to find the next/previous character. Pressing fa will go to the next letter a. Pressing Fa will go to the previous a. Without this extension, you have to either type fa again to find the next a or press the semicolon ;. Similarly, you have to type Fa or , to find the previous a again. If you're a seasoned vimmer, you're already using ; and , for something else so you end up doing fafafafa or FaFaFaFa.

With this extension, you can just press f again and it will search the next a character, and you can press F again and it will search the previous a. So, instead of doing fafafafa, you can now do fafff and instead of FaFaFaFa, you can do FaFFF. Also, when you press f or F, it will illuminate the next/previous matches to that you instantly know where the cursor will jump.


A dark color scheme that I like. Gray background, light green text and functions.


Another dark color scheme that I like. Black background, light green text, light yellow functions.


Another dark color scheme that I like. Gray background, light blue text, light yellow functions.


One of the simplest and quickest commenting plugins. Press gcc to comment out the entire line. Press gc to comment out a visual selection. Press the same shortcuts again to uncomment.


This plugin helps resolving git merge conflicts. Let's say you just pulled code from the project's master branch on github and you got a merge conflict error. To resolve it, you can run the :Conflicted command that this plugin offers. This command creates a three-way diff and puts the results in three vertical split windows. The left split is upstream changes, the middle split is working changes, and the right split is local changes. You can either accept upstream diff or the local diff to resolve the conflict. Conflicted offers two key mappings for quickly accepting the right diff. The dgu command will use the upstream diff and dgl will use the local diff. To resolve the next conflict, use the :GitNextConflict command. If there are no more conflicts, vim will exit, and you can git commit the resolved files.


This plugin adds the ctrl+p binding that opens a fuzzy file open dialog. For example, if you need to edit math-config.json file, then you can just type some of the letters of filename like mat.js, mjson, or even thfig (letters "th" are last two letters of "math" and "fig" are last three letters of "config"). Ctrlp will immediately narrow down the search list and offer the best match. It can also be used to open mru files (most recently used files) and buffers and you can cycle between file/mru/buffer mode with ctrl+r and ctrl+f shortcuts.


Ctrlp-funky extends the Ctrlp plugin (above) by adding function finding mode. You can either run the :CtrlPFunky command to immediately open Ctrlp in function search mode, or open Ctrlp by pressing ctrl+p and then press ctrl+r (or ctrl+f) a couple of times to go to function search mode. For example, if you have the void debug_print() function, you can type vodepr (first two letters of words void, debug, print), hit enter, and vim will jump to the definition of this function.


With this plugin, you can quickly search and replace a lot of text. When you run the :CtrlSF pattern command, it creates a results window on the left with all the matches. The results window also has several context lines around the matches so that you know you're looking at the right match. You can now directly make edits in the results window. When you save the results window, the changes will be saved in the files, too. You can also press enter to open each result in the right window and edit it there.


Delimitmate automatically closes quotes and parenthesis. For example, you type " and it makes it "" and puts your cursor between the quotes.


This plugin adds a new diff visualization method to vimdiff, which tries to minimize the number of differences. When you're in diff mode, enter the :EnhancedDiff patience command and you should get better visualization of the diff.


Dirvish embraces idiomatic buffer-driven development and it complements Nerdtree (below) as a file browser. When you hit the - key, the current buffer will turn into a file browser. You'll see all the files of either the current working directory or currently open file directory. You can then use the arrow keys hjkl and the search operator / to navigate this directory and find files. When you hit enter, Dirvish will exit and the file under the cursor will open in the current window as a new buffer. This plugin is especially powerful when you have multiple splits open as you're dictating in which split the next file will be opened. You just navigate to the split, hit -, find the file and, hit enter, and you have it open in the split that you want.


Dsf is short for delete surrounding functions. By pressing dsf in a function call, it will delete the surrounding function name. For example, if you have code like print_r(get_post|s(true)) and your cursor is where the | character is, then when you press dsf, you'll get get_posts(true) as output.


With this extension you can neatly align text in columns. It adds the :EasyAlign command that you can bind to any keyboard shortcut that you want to. When you execute it, it asks for the column separator character and then formats the selected text. For example, to align code so that all = signs were in the same column, you can visually select the lines with the V command, then run :EasyAlign followed by = and then press enter.


Easymotion makes it much quicker to navigate around the file. It adds the \\w shortcut that lets you quickly jump to any word after the cursor. It assigns a unique letter to each word and when you press it next, the cursor instantly jumps to that word. It also adds \\b shortcut that lets you quickly navigate backward. Similarly, if you need to jump to any line above or below, you can use \\k and \\j shortcuts.


With the Exchange plugin, you can very quickly swap two words. Go to the first word and press cxw, then go to the second word and press cxw again. Done – you just swapped these two words!

Actually, you can swap not just two words but any two motions. After you press cx, the next shortcut is a motion (a motion is a keyboard shortcut that moves the cursor). For example, to swap two characters, you can do cxl and then cxl again (l is a motion that moves the cursor one position to the right.) Similarly, to swap two sentences, you can do cxis and cxis again for the second sentence. In this case, the motion is is that selects the entire sentence.

Also, if both motions are the same, just press . to repeat the first motion.


Often, you want to select just a little bit more text than you just selected. For example, you selected a word with viw but then you realize you wanted to select the entire quoted string. With this plugin, you can press + and it will expand the current selection to the next largest text object. Character to a word to a quoted string to a line to a paragraph to the entire file.


Far makes it easy to find and replace text in multiple files. It adds the :Far pattern1 pattern2 command. When you run this command, it splits the screen in two halves. In the upper half it shows all files and lines that pattern1 matches. In the lower half, it previews the match context. In the upper split, you can use hjkl keys to navigate matches. By default, all matches will be replaced with pattern2 but you can also use the t key to unmark the matches (and use t again to mark them). After you have selected all matches that you want to replace, run the :Fardo command. This command will perform the actual replacement.

Far also is great for grepping all matches. You can use :F pattern command and it will find all pattern matches and display them in two splits, but it won't do the replacement.


With Fugitive, you can use git directly from vim. It adds the :Git command or :G for short that runs git status and shows the result in a split window. You can then use the s keyboard shortcut to stage (git add) a file, u to unstage (git reset) a file. After you stage the files, you can press cc to create a commit. I don't know how to do a git push yet so that's something I still have to learn. It would be pretty handy if I could git push code and deploy without leaving vim, too.


Fzf is an alternative to Ctrlp (above). It adds several commands for quickly opening files and switching buffers. These commands are :Files and :Buffers. If you were pressing tab multiple times to complete filenames and buffer names, now you only need to type a few letters of the filename or buffer name. For example, if you need to open options.c file, you can just type opt.c or even just oc and Fzf will offer you the best match.


Fzf-mru adds an mru mode that can be accessed via the :FZFMru command. This mode lets you quickly access files that you recently edited. Let's say you worked on a scraper yesterday. Today, when you enter the mru mode, you can just type scra and it will show all files from the scraper project that you worked on yesterday.


Gitgutter adds two useful things. The first is an extra column on the left-most side of vim that quickly shows git diff information of the current file. You can quickly see which lines were added and changed. The second is the ]c and [c mappings that let you jump between the changed lines.


I have recently switched to programming in Goyo mode. When you type the :Goyo command, this plugin centers the content and removes line numbers and status line so that you can focus on distraction-free coding. It's especially great if you also make your vim fullscreen.


Grepper improves grepping in vim and adds ripgrep support. You can type :Grepper, then enter your search query, and it will find all matches and load them in the quickfix window. You can then use vim's :cn and :cp commands to navigate to next/previous match or use Unimpaired plugin's (below) shortcuts ]q and [q.

The author of this plugin suggests using it together with the qfenter.vim plugin and it's something I still have to try.


Gv adds git commit browser to vim. You can run the :GV command and it will show the entire commit tree. You can then view individual diffs by pressing enter or o in the commit window. To exit diff viewer, press q. If you're interested in the git log of the current file only, then use the :GV! command.


Illuminate highlights all occurrences of the word under the cursor in the currently visible buffer. For example, if the cursor is on the word var, then all other vars will be illuminated, too.


This plugin allows you to highlight multiple words at the same time. It adds the \k shortcut that changes the background color of the word under the cursor as well as all other occurrences of the same word in the file. You can also use n and N shortcuts to jump to the next/previous highlighted word. It's very useful when you're working on complicated code and need to keep track of how multiple variables are used.


Linediff allows you to quickly diff two blocks of text. Visually select the first block of text and run the :Linediff command. Then visually select the second block and run the same command again. This plugin will then create a new tab with a vertical split with the diff of two text blocks. If the results look too verbose, run the :EnhancedDiff patience command (from Diff-enhanced plugin, above) to improve the diff.

You can also quickly resolve git merge conflicts with this plugin. If you have a file open with a merge conflict in it, put the cursor between the merge conflict markers <<<<< and >>>>> and run the :LinediffMerge command. The plugin will then automatically create a vertical split with the merge conflict diff. You can then make edits in the left or the right split and automatically resolve the merge by running the :LinediffPick command.


Once you get to a certain level of proficiency in vim, you'll start using the quickfix window all the time (and also the location list windows) . Grep results will go in quickfix, linting errors will go in quickfix, compile errors will go in quickfix, todo lists will go in quickfix. Everything will go in quickfix. You'll be closing and opening quickfix all the time. Unfortunately, there's no easy way to toggle the quickfix window and location list windows. You have to use :copen and :cclose commands to open/close quickfix, and :lopenand :lclose to open/close location list. This is just too much typing.

Listtoggle makes it much easier and adds two shortcuts to quickly toggle them. The \q binding will toggle the quickfix window and the \l binding will toggle the location list window.


Very often you need to find all occurrences of something in the current file. You don't want a global search, you don't want a search and replace, you don't want any splits, you just an overview of all results. Locate offers exactly that via the :Locate command or :L for short. Just type :L pattern and this plugin will open a quick location list with all occurrences of pattern in the current file. You can toggle the location list with the \l shortcut (offered by Listtoggle plugin, above) and you can navigate through the results via the ]l (next result) and [l (previous result) shortcuts (offered by Unimpaired plugin, below.)


This plugin highlights the innermost opening and closing HTML tags that your cursor is positioned in. For example, if you're between <div class="post">cursor here</div>, then this plugin will highlight <div> and </div> tags.


Matchup adds the % shortcut that lets you quickly jump between matching pairs of parenthesis. If your cursor is on the { character, then after pressing % it will jump to }. If you press % again, it will jump back to the opening paren. It also adds the z% shortcut that lets you jump forward inside the next pair of parenthesis. Let's say you have a function pri|nt_data("hi", 7) and your cursor is |. Then after pressing z%, you'll be in the function arguments.


Nerdcommenter is another code comment plugin. With Commentary (above) you can quickly toggle comments with the gc shortcut but Nerdcommenter gives more control over comments. For example, you can do multi-line comments with the \cm shortcut and add comments at the end of the line with the \cA shortcut.


Nerdtree is a file manager. It shows a full directory and file tree structure of the current project on vim's left side. To open and close Nerdtree, run the :NERDTreeToggle command. For convenience, you can bind it to the \t shortcut. When it's open, you can navigate around using the regular hjkl keys. Use the O key to open all directories in the project and then search for files using the regular / search operator. To open the file under the cursor on the right side, press the o key. To see the hidden files, use the I key. Compared to Dirvish (above), it embraces file-manager driven development. Instead of you dictating where to open a file, Nerdtree always opens it on the right side.


This plugin adds syntax highlighting to Nerdtree. Files and directories now have different colors.


Vim has many different registers. When you copy text, it goes in the " register. When you delete text, it goes in the number registers. Then there are lowercase and uppercase registers for your personal use, and many more.

This plugin previews the registers when you're about to use them. When you press the " key, it opens a register cheat sheet on the right and you can see the contents of each register and choose the right register. You can also press the space key to make the register cheat sheet larger.


Quickfix is one of vim's greatest features. Unfortunately, once a quickfix list is populated with the results, it's frozen. You can't filter the quickfix list further. This behavior doesn't make much sense because you always want to refine the results.

Qfgrep lets you do that. You can now filter the results in the quickfix window. Use the \g shortcut to filter results, \v to invert filtering results, and \r to restore the original entries. It also adds the :QFGrepPat command that does the same as \g and :QFGrepPatV that does the same as \v.


Qlist adds the :Ilist function that is an improved version of vim's built-in :ilist function. The built-in :ilist function comes from a time when computers didn't have much memory so it's not very useful as it prints everything to the screen in a hurry and you can't use the results (also see Bufferize plugin, above). The improved :Ilist function creates a quickfix list from the results. You can now run :Ilist pattern and this plugin will find all uses of the word pattern in the current and included project files and put them in the quickfix window, exactly where you want all the results always to go.


Not only do you want to filter quickfix results (with Qfgrep, above), you also want to edit the quickfix window as if it was simply just another buffer. This plugin makes the quickfix window modifiable. You can now use dd to delete quickfix entries and i to add new entries. You can also directly edit the quickfix results and when you save the quickfix window via :w, the files will get updated, too.


Ragtag adds three useful keyboard shortcuts for working with HTML tags. The first one is ctrl+x/ that closes any open tag. For example, if you're in a <div> tag, then you can immediately close it and get <div>...</div>. The second is ctrl+xSPACE that creates an opening and closing tags from the word that you just typed. For example, if you typed tag and then immediately pressed this shortcut, then you'll get <tag>|</tag>, where | is the cursor. The third is ctrl+xENTER that works the same way as the previous shortcut but puts an empty line between the two tags.


This plugin lets you jump to the external Ranger file manager to open a file in vim. It's similar to Dirvish (above) and lets you easily do buffer-driven development. When you run the :Ranger command in any window, it launches the ranger process. Then, when you select a file, it will open in the selected file as a new buffer.


Repeat improves the . command. It lets you repeat commands and actions of other plugins. For example, if you wrap text in quotes using the Surround plugin (below), then pressing . will repeat that.


Something that you very often do in vim is pasting from a register. Usually, this is done by either first deleting what you want to replace and then pasting, or visually selecting the part to replace and then pasting. Often, you know exactly what you will be replacing. For example, a sentence, a paragraph, or a word. This plugin adds the replace-motion-with-a-register shortcutgr{motion}. For example, to replace a sentence, you can simply do gris (is is the motion that selects the current sentence). To replace the current word, you can do just griw. It also adds another useful shortcut grr that replaces the entire line.


The problem with the Replace-with-register plugin (above) is that when using the grr shortcut, the entire line is replaced without keeping the indent. This plugin fixes that and adds the grR shortcut that does the same as grr but also keeps the indent of the current line.


As vim is not an IDE, it has little to no notion of projects and doesn't know what a project's root directory is. When you try to open a file, vim searches either your home directory or some other directory and not the project's directory.

This plugin makes working with projects a tiny bit easier by automatically setting vim's current working directory to project's directory. It does it by looking for the root-most .git directory. Usually, the presence of such directory indicates where the project starts.


Vim's documentation mentions a special buffer type called a scratch buffer. This plugin implements it. A scratch buffer is a temporary throw-away buffer. It's useful for making quick notes as you're working on a project. Use the :Scratch command to open it. The cursor will jump to the scratch window at the top. When you move the cursor to another window, the scratch window will automatically close.


When using marks, there's no way visual way to tell where you added them. You may remember one or two marks but when you add more, you get lost. This plugin solves this problem and displays marks in the left-most column. You can add and toggle marks with the default shortcuts ma, mb, ..., remove individual marks with dma, dmb, ..., remove all marks with m-, jump to the next and previous mark with ]` and [`, and put all marks in a location list window with m/.


In normal mode, ctrl+a and ctrl+x increment and decrement numbers. This plugin makes these keyboard shortcuts also increment dates and clock times. For example, if the cursor is on a string 2000-01-31, then pressing ctrl+a will make it 2000-02-01 and pressing ctrl+z will make it 2000-01-30.


Splitjoin lets you switch code snippets from single-line statements to multi-line statements and back. Let's say you have a single-line HTML snippet <div class="welcome"> hi </div>, then after pressing gS (split), it will turn into a multi-line HTML snippet <div class="welcome">\n hi \n</div>. If you press gJ (join) on this multi-line snippet will turn it back into a single-line snippet.


The default man page readers (less, more, or most) are not very usable. You can page through the content and that's about it. Imagine reading and navigating man pages with vim and applying all these plugins to the man page (highlighting words, deleting boring parts, finding all matches, using marks, jumping, copying text, etc). Now you can with Superman! Use the command :SuperMan ls to read man page of ls. To use it from the shell, call vim -c "SuperMan ls". In my shell, have replaced the original man command with vim -c "SuperMan $@" and so should you.


With Surround, you can quickly delete, change, and add matching pairs of surrounding symbols around text. Let's say you have a string "hello world". By pressing ds", you'll delete the quotes and the string will become hello world. By pressing cs"' you'll change double quotes to single quotes and the string will become 'hello world'. You can also press cs"<div> and that will change quotes to <div></div> HTML tags and the string will become <div>hello world</div>. If you have a plain string hello world, then to wrap it in quotes, visually select it with v and then press S and enter the wrapping symbol. If you have a single word hello, then to wrap it in single quotes, press ysiw'.


Swap lets you swap words or comma separated function arguments quickly. For example, if you have a function print(a, b, c), then you can press g> and it will become print(b, a, c). Press g< and it will become print(a, b, c) again. You can also enter visual swap mode by pressing gs. Then use hjkl keys to swap arguments around.


Syntax highlighting plugin for CSS3.


Syntax highlighting plugin for Dockerfiles.


Syntax highlighting plugin for HTML5.


Syntax highlighting plugin for i3 window manager configuration files.


Syntax highlighting plugin for JavaScript.


Syntax highlighting plugin for JSON.


Syntax highlighting plugin for Nginx configuration files.


Syntax highlighting plugin for PHP.


Syntax highlighting plugin for tmux configuration files.


Terminal vim doesn't have the * or + registers that are used for copying and pasting to/from system clipboard. This plugin adds the cp shortcut that copies the selected text or a motion to system clipboard by calling xsel external utility. It also has the cv shortcut for pasting from system clipboard.


Tabular does the same as EasyAlign (above). It aligns text in columns. It has an advantage over EasyAlign that you can immediately pass it a regular expression for the alignment. The position where the regular expression matches is where the alignment happens. For example, :Tabular /regex will create neat columns of regex.


This plugin makes it easy to rename pairs of opening/closing HTML tags. You only have to rename one of them and this plugin will automatically rename the other. For example, if you have a <div>...</div> and you rename the opening <div> to <section>, then the closing tag will automatically be renamed to </section> and you'll get <section>...</section> in the output.


One of the steps in reaching vim mastery is learning to use text objects. Text objects let you operate on entire text constructs rather than individual characters. Vim ships with many text objects already – you can access words, sentences, paragraphs, and code blocks. This plugin adds a dozen more text objects. For example, you can delete comma separated items with di, or you can change the next and previous comma separated items with cin, and cil,, you can change sum elements with ci+, and much more.


Terminus improves your vim experience in the terminal. Often, when you paste a multi-line text, vim adds indents to each new line and your text runs to the right. It fixes this problem by enabling bracketed paste. With bracketed paste, the entire pasted text is treated as a single blob and vim doesn't indent each line. It also adds caret cursor for the insert mode, handles terminal focus events, and it improves the mouse support by enabling the sgr mouse mode.


It's very difficult to write your own text objects from scratch because you have to replicate precise vim behavior when a text object is invoked and know all the gotchas and pitfalls. This plugin provides a quick and easy interface that lets you implement your own text objects. There's an entire ecosystem of "textobj" plugins that use this plugin to add various useful text objects.


This plugin uses Textobj-user (above) to create a text objects ie and ae that operate on the entire file. For example, to select the entire file, you can do vae, to delete the entire file, you can do vaed or dae.


This plugin lets you visually move the selected text. For example, you can visually select a word, and then use the ctrl+h and ctrl+l shortcuts to move it to the left or right. Similarly, you can move entire lines down and down with the ctrl+j and ctrl+k shortcuts.


With this plugin, you can access Libreoffice thesaurus. Once you configure it, you can use the :Thesaurus word command to find all words related to the word word and you can also use :ThesaurusW to find all related words of the word under the cursor.


When you're in the flow, a lot is happening at once and you have many tmux windows and panes open. One with git log, another with tests, another one with a man page, etc. Often, you need to get info from a tmux pane into vim. Usually, you have to use your mouse to copy it in but that is very ineffective. With this plugin you can just press ctrl+x ctrl+u in insert mode and complete words from any tmux windows/panes. It will offer a list of all words from all tmux windows/panes.


When substituting text with the :s/old/new command, you can't see the changes until you execute it. This plugin previews the old match as you type it as well as the substitution part new and you get a visual feedback that shows if you're doing it right.


Ultisnips is a snippet engine. When you press the tab key, it looks at the last typed token and expands it to a snippet. To make it work, you need to create a language.snippets file and write your snippets there. For example, you can create php.snippets and put an if snippet there if ($1) { $0 }. Now when you're programming PHP and type if and press tab, it will expand to if (|) { } and your cursor will be where the | character is. If you press tab again, it will jump to $0 token between the curly braces if () { | }.


Often, you're just too quick and close a window that you didn't want to close. With this plugin, you can now hit ctrl+w+u and undo a closed window.


This plugin lets you quickly search and insert Unicode characters. For example, if you want to insert a Unicode rabbit symbol, you can type rabbit and then press ctrl+x ctrl+z. The typed text rabbit will get substituted with a rabbit emoji.


Many commands come in pairs. For example, :bn and :bp to go to the next/previous buffer, :cn and :cp that go to the next/previous quickfix list item, :ln and :lp that go to the next/previous location list item, etc. This plugin adds quick shortcuts for these commands. You can now ]b and [b to go to the next/previous buffer, ]q and [q to go to the next/previous quickfix entry, ]l and [l to o to the next/previous location list entry, etc.


When you're working with multiple split windows, after a short distraction, it's easy to forget which split you're working in. This plugin fades all splits so that the currently focused split is clearly visible.


The Repeat plugin (above) repeats normal mode commands when you press .. This plugin extends Repeat to work in the visual mode. When you select a visual region and press . it will run the normal mode commands only on the selected area.


Often, you need to keep a comment, a function definition, or a code fragment above the fold so that it's always visible. The usual approach is to split the window with ctrl+w+s and then resize it smaller with 10ctrl+w+-. This plugin merges these two actions. You can now visually select the area and press ctrl+w+gss. The plugin will split the window and resize it to exactly fit the selected lines.


Writeable-search is similar to CtrlSF (above). It lets you quickly find results and immediately edit them in the results window. When you run the :WritableSearch pattern command, it will grep all files in the current directory for the pattern and open a new tab with the results. You can then edit the results and when you do a :w in the same results window, it will update files with changes. If you already have a list of things to fix in the quickfix window, then you can transfer them to this plugin for editing via the :WritableSearchFromQuickfix command.

See you next time!

My Linux and Vim Notes

These are my Linux and Vim notes. You may find something useful in this list.

  • flameshot - neat screenshot app
  • peek - screen recorder that I haven't tried yet
  • ppa-purge - delete installed ppa packages
  • light - app to change screen brightness
  • lenovo-throttling-fix - fix throttling on thinkpads
  • mypaint - neat infinite canvas painting app
  • pinta - paint app that crashes
  • ranger - file manager for the shell
  • fzf - find items quickly in lists
  • nnn - another file manager for the shell
  • xrandr - manage monitors
  • arandr - gui for xrandr
  • pdfmod - pdf editor that i haven't tried yet
  • vimium - chrome plugin for vim keyboard shortcuts
  • vimperator - firefox plugin for vim keyboard shortcuts
  • subuser - run apps in docker, haven't tried yet
  • ag - silver searcher, faster grep but today ripgrep is better
  • icdiff - prettier diff
  • xsel - use system clipboard form the shell
  • xclip - xsel alternative
  • syncthing - synchronize files between computers
  • unison - also synchronize files between computers
  • sway - i3 window manager for wayland
  • tmux-xpanes - split terminal into rectangles and run commands in them
  • - clever guy who wrote nnn
  • luke smith - interesting videos about linux
  • byobu - predefined tmux and screen configs
  • rat poison - another tiling window manager
  • gmic - image manipulation from the shell
  • things every hacker once knew - interesting blog post by esr
  • syntastic - vim lint plugin
  • - vim plugins ranked by usage
  • vim after 15 years - someone's experience about using vim for 15 years
  • tmux-resurrect - restore tmux windows as they were on restart
  • scratchpad in i3 - hide a window and then bring it back
  • i3bar - default status bar for i3
  • i3status - system status string generator for i3bar
  • i3blocks - alternative system status string generator for i3bar
  • polybar - another system status string generator for status bars
  • dmenu - default i3 app launcher
  • rofi - alternative app launcher
  • i3-layout-manage - save and load i3 layouts
  • xprop - print x windows info
  • font-awesome cheat sheet - find icons fast
  • going mouseless - youtube video about using linux without a mouse
  • xss-lock - screen lock utility for x
  • xset - change x settings such as keyboard speed
  • x power tools - a book about x windows tools
  • xlsfonts - list x windows bitmap fonts
  • xlfd - naming scheme for bitmap fonts
  • xfs - modern fonts for x or something like that
  • stephane chezelas - interesting stackoverflow answers
  • yesmeck - interesting tmux.conf on github
  • showkey - detect key presses and print keyboard keys
  • xev - same but only works in x windows
  • tmux2 - a book about mouse free development
  • dunst - send notifications to the screen from console and scripts
  • wmctrl - advanced control of x windows via command line
  • sxhkd - window manager independent keyboard shortcut manager
  • tao of tmux - a book that teaches tmux
  • xcb - alternative library to xlib for writing x windows apps
  • xcb tutorial - a short tutorial on xcb
  • entr - watch a file for changes and run commands
  • toe - print terminal types
  • infocmp - print terminal info
  • text terminal howto - linux howto about text terminals
  • man console_codes - man page of linux console codes and escape sequences
  • ESC[XmTEXTESC[0m - print TEXT in color X in terminal
  • dcvim - plugin to use vim keys in double commander
  • ack - improved grep
  • ctags - search code for keywords, short for exuberant ctags
  • cscope - more detailed code search for keywords and function names
  • universal ctags - new and maintained version of exuberant ctags
  • gnu global source tagging system - ctags/cscope alternative
  • exa - ls alternative, not sure why
  • ripgrep - fastest grep
  • fzf.vim - vim plugin for fzf
  • bat - cat replacement with syntax highlighting
  • surfingkeys - vimium alternative for chrome
  • - blog of author of surfingkeys
  • alacritty - gpu accelerated terminal
  • kitty - another gpu accelerated terminal
  • evil - emacs plugin that makes it work like vim
  • org mode - note taking plugin for emacs
  • spacemacs - emacs clone with vim features
  • ctrl+j in bash - accept ctrl+r history search entry
  • ctrl+g in bash - discard ctrl+r history search entry
  • ctrl+w in bash - delete the current word
  • ctrl+y in bash - put the deleted word back
  • going all in with neovim - youtube video about neovim
  • mosh tech talk - google tech talk about mosh
  • x window system design principles - youtube video about x window history
  • real story behind wayland and x - youtube video about wayland and x
  • tacit programming - synonym for point-free programming, not sure what that is
  • stack-oriented programming - programming with stacks, something advanced
  • architecture of open source apps - book about popular open source apps
  • thinkpad x210 - old laptop remake by 51nb enthusiast group from china
  • lstopo - print device tree
  • - a script to create debian root structure in an arbitrary directory
  • shell wtf's - oilshell blog posts about shell gotchas
  • flatpak - new app package format for linux
  • debian popularity contest - public stats about most downloaded debian packages
  • nwallace dotfiles - interesting dotfiles of github user nwallace
  • cool uses for fzf - google this to find cool uses of fzf
  • tcplife - bpf to trace tcp connections
  • bcc - collection of bpf tools
  • - a list of tools that have vim interface
  • - interesting blog about unix things
  • wine tricks - wine helper program to install libraries
  • i3-vim-focus - integrate vim splits with i3
  • - collection of vim color schemes with previews
  • vim-bufferline - vim plugin that shows open buffers at the bottom
  • defaults.vim - file with default vim settings that comes with vim
  • :term in neovim - command to open a terminal inside neovim
  • vimcasts - website with short vim video tutorials
  • vifm.vim - use vifm file manager in vim
  • bufexplorer.vim - vim plugin to quickly switch between buffers
  • ctrlp.vim - vim plugin that lets you open files by fuzzy matching on ctrl+p
  • command-t.vim - vim plugin similar to ctrlp but does the same with ctrl+t
  • vim-fugitive - vim plugin to use git from vim
  • ack.vim - vim plugin to use ack from vim
  • unimpaired.vim - adds pairs of commands to vim such as [b and ]b, [s and ]s, etc
  • fzf.vim - use fzf in vim to open files and find buffers
  • sensible.vim - modern default settings for vim
  • supertab.vim - autocomplete plugin for vim that uses tab as the completion key
  • zoomwin.vim - vim plugin to maximize the current window
  • quick fix window - special vim window that can be used to list errors and jump to them
  • airline.vim - pretty status bar for vim
  • amix vim configs - interesting vim config of github user amix
  • solarized color scheme - popular nice looking color scheme for vim and terminal
  • tagbar.vim - vim plugin that shows functions on the right side of the current file
  • vim-css-color - vim plugin that shows css colors in vim
  • goyo.vim - vim plugin that centers text and removes line numbers, status bar, etc
  • coding in goyo mode - something to try
  • ale.vim - vim lint plugin, alternative to syntastic
  • statico dotfiles - very complex and interesting dotfiles of github user statico
  • :helpgrep - vim command to grep its help files
  • vim-textobj-user - vim plugin to define your own text objects
  • :ls - vim command to list currently open buffers
  • :b substr - vim command to jump to buffer that matches "substr"
  • ctrl+] - press this in vim's help to jump to definition of the word under cursor
  • ctrl+t - press this in vim's help to jump back from previous ctrl+] press
  • ctags -R . - build tags file for the current directory and all subdirectories
  • i_ctrl+x-ctrl+k - in vim's insert mode, show dictionary suggestions
  • i_ctrl+x-ctrl+t - in vim's insert mode, show thesaurus suggestions
  • :only - vim command to close all windows and maximize the current one
  • :tabonly - vim command to close all tabs and maximize the current one
  • i_ctrl+o - in vim's insert mode, switch to command mode for 1 command
  • ctrl+^ - switch between last two open buffers in vim
  • vim 8.2 adds popup windows and text properties
  • :match and :highlight - vim commands to color patterns
  • :set undofile - if undo file is set in vim, you can undo after closing a file
  • i_ctrl+R - in vim's insert mode, insert a register
  • /r/neovim - neovim subreddit
  • sneak.vim - vim plugin to quickly find two character patterns
  • vim-easy-align - vim plugin to align text in columns
  • lion.vim - another vim plugin to align text in columns
  • ultisnips.vim - code snippet plugin for vim
  • vim to emacs in 14 days - blog post about moving to emacs from vim in 14 days
  • denite.nvim - a modern vim/neovim plugin to create you own interfaces
  • neosnippet.vim - another snippets vim plugin
  • deoplete.vim - another completion vim plugin
  • you don't grok vim - someone's answer on stack overflow that explains how vim works
  • iw - vim motion that selects a word
  • aw - vim motion that also selects a word, including trailing whitespace
  • is - vim motion to select a sentence
  • as - also vim motion to select a sentence, including trailing whitespace
  • '[ - start of the last change in vim
  • '] - end of the last change in vim
  • clap.vim - vim plugin interactive finder that uses :popup
  • LSP - language server protocol used for auto hinting and linting
  • tree-sitter - incrementally parse source code, not sure
  • jutin m keyes - neovim lead maintainer
  • - justin's blog
  • - justin's tech notes, especially vim notes
  • c_ctrl+f - open a list of command history in vim command mode
  • unix as ide - blog post series about using unix tools for programming
  • :syntax keyword WordError teh - mark the word "teh" red in vim
  • - top brew installs
  • neovim diff.txt - neovim documentation page about vim and neovim differences
  • ]) - in vim jump to next ), doesn't work for me
  • ]( - in vim jump to previous (, doesn't work for me
  • ]/ - in vim jump to end of comment, doesn't work
  • [/ - in vim jump to beginning of comment, doesn't work, not sure
  • learn vim script the hard way - good book about vim script
  • - active unix forum
  • podcast - unix podcast
  • fzf in a floating window - cool idea
  • xi text editor - a new text editor by raph levien
  • design of lua - pdf document about lua
  • vim hall of wtf - blog post about complex code in vim
  • neoterm.vim - vim/neovim plugin that improves built-in terminal usage
  • skim - fzf alternative written in rust
  • gq-motion - in vim format code that is matched by motion
  • :ptag tag - open a tag in preview window
  • ctrl+w+z - close the preview window
  • ctrl+w+} - run :ptag on the word under the cursor
  • :pclose - close the preview window
  • highlightyank.vim - vim plugin to highlight yanked text region
  • meld - neat visual diff tool
  • beyond compare - another visual diff tool
  • fd - find command alternative
  • vis.vim - vim plugin to run a command on visually selected area
  • tmate - tmux fork that lets you share terminal
  • vimux - create tmux splits and run tmux commands from vim
  • trunk based development - no feature branches, just master branch
  • coderay - syntax highlighting app
  • risc-v - open source instruction set for cpus
  • look "word" - unix command that prints lines that begin with a word
  • icegiant - new cpu cooler
  • ctrl+e - in vim in ctrl+x mode, discard selection
  • ctrl+y - in vim in ctrl+x mode, accept selection
  • ]m - in vim jump to end of a method, doesn't work for me, not sure
  • [m - in vim jump to beginning of a method, not working
  • rpcinfo -p host - show rpc status of host
  • tldp - linux documentation project
  • jq - json filtering utility for the shell
  • fslint - app to find duplicate files
  • sjl bitbucket dot files - interesting dotfiles of user steve losh
  • - 16 years of vim commands
  • junegunn dotfiles - interesting dotfiles of fzf author junegunn
  • nnoremap a b, nnoremap b a - swap keys a and b in vim
  • i_ctrl+k - enter a digraph in vim
  • git reflog - show reflog info, useful for redoing commits
  • git rebase --exec 'cmd' - exec a command after each commit while rebasing
  • n_+ - in vim pressing + will go to next non-blank on next-line
  • g; - in vim go to previous change
  • g, - in vim go to next change
  • n_ctrl+e - in vim scroll up the screen by one line
  • n_ctrl+y - in vim scroll down the screen by one line
  • i_ctrl_x+ctrl+e - in vim's insert mode, scroll up the screen by one line
  • i_ctrl_x+ctrl+y - in vim's insert mode, scroll down the screen by one line
  • zENTER - in normal mode in vim, scroll current line to top of the screen
  • zt - same as zENTER
  • z. - in vim's normal mode, center the current line on the screen
  • zz - same as z.
  • z- - in vim's normal mode, put the curernt line at the bottom of the screen
  • zb - same as z-
  • gd - in vim, go to definition of the word under cursor in current file
  • power of g command - vim wiki summary of g command
  • ". - vim register that contains last inserted text, doesn't work for me
  • i_ctrl+a - repeat last inserted text in vim in insert mode, doesn't work for me
  • i_ctrl+@ - repeat last inserted text and leave insert mode, not working
  • i_ctrl+x_ctrl+n - appears to do the same as i_ctrl+n, not sure how this is different
  • z= - in vim, show spelling suggestions for the word under the cursor
  • vim buffer faq - faq about working with vim buffers
  • bind -m "mode" - create a readline key binding that only works in "mode"
  • docker multi-stage builds - build a docker container from another container
  • invoke-rc.d - same as service command
  • git commit --amend - edit commit message of the previous commit
  • offline imap - use imap mailboxed without the internet
  • mbsync - offline imap alternative
  • notmuch - search your mailboxes
  • sc-im - command line spreadsheet
  • gnu units - command line utility to convert between various units
  • z - remember visited directories and quickly jump to them, best with fzf
  • autojump - z alternative
  • fasd - z alternative
  • v - quickly open last edited files in vim, best with fzf
  • bfs - find alternative to search directories level by level
  • awesome-shell - curated list of awesome shell stuff
  • tabular.vim - vim plugin to align text in columns
  • bufkill.vim - vim plugin to kill the buffer but don't close window
  • closetag.vim - vim plugin to autoclose html tags
  • broot - another file manager for the terminal
  • tint2 - taskbar for x windows
  • youcompleteme.vim - lightweight vimcompletesme.vim plugin alternative
  • pathpicker fpp - interactively select files in the terminal and edit them
  • shellcheck - bash script linter
  • the art of command line - concise command line tutorial on github
  • asciinema - record and share command line sessions as movies
  • zoom tmux pane - you can zoom a tmux pane in and out with prefix-z
  • interactive filter: a new standard tool - summary of interactive filters on
  • aria2 - lightweight download app that also supports bittorrent
  • linux problems on the desktop - article about why linux on desktop is garbage
  • prettyping - wrapper around ping to make its output pretty
  • dwdiff - tool that prints word-level diff
  • vimdiff - diff files using vim
  • colordiff - wrapper around diff to add color to it
  • xbindkeys - app to bind keys to do anything you want in x
  • progress - utility to monitor cp, mv progress
  • httpie - a curl alternative written in python
  • curlie - a curl wrapper with httpie syntax
  • oh my zsh - scripts to make zsh pretty
  • mycli - much nicer mysql command line tool
  • pgcli - same as mycli but for postgres
  • litecli - same as mycli but for sqlite
  • ts task spooler - queue and run tasks from command line
  • w3mimgdisplay - show images in the terminal
  • ueberzug - also show images in the terminal
  • heidisql - free open source gui for mariadb, mysql, and postgresql
  • - learn keyboard shortcuts of various apps by repeating them
  • grc - colorize terminal output using regular expressions
  • supercat - grc alternative
  • fselect - find files using sql-like queries
  • newsboat - terminal rss reader
  • glances - top/htop alternative
  • up pipe plumber - instantly preview results when you pipe programs
  • autossh - automatically restart ssh sessions and ssh tunnels when they die
  • sshuttle - vpn over ssh
  • - search rust libraries by category
  • procs - ps alternative
  • ctrlsf.vim - finds patterns in vim and show them on the left for quick refactoring
  • chars - command line program to print unicode character info
  • ascii - command line program to print ascii table
  • vim-qf - vim plugin to make it easier to work with quick fix window
  • - rust news and articles
  • gutentags.vim - vim plugin to regenerate ctags files
  • codi.vim - vim plugin to interactively write and run code snippets
  • jedi.vim - vim plugin to use jedi autocompletion in python
  • keepass + fzf - cool idea
  • qutebrowser - web browser that uses vim modes and vim keyboard shortcuts
  • fzf instead of dmenu - cool idea
  • bash search history via fzf - cool idea
  • notational velocity - popular note taking app
  • notational-fzf-vim - vim plugin that implements notational velocity with fzf
  • bmore - binary more
  • bvi - binary vi
  • favorite terminal apps - forum thread on nixers
  • diff-so-fancy - another pretty diff program
  • what's your vim setup like - lobsters thread
  • peekaboo.vim - preview vim registers on the right side before inserting them
  • awesome cli apps - github repo with a list of cool cli apps
  • - man pages through examples
  • learnbyexample - clever github user with many tutorial repos
  • insect - scientific calculator
  • seven habits of effective text editing with vim - talk by bram moolenaar
  • rga ripgrep-all - ripgrep in pdfs too
  • sxiv - very simple image viewer for x
  • mdcat - cat markdown files
  • dust - du alternative
  • diskus - another du alternative
  • websocat - netcat for websockets
  • machakann vimrc - advancd vimrc configuration by github user macakann
  • history and effective use of vim - detailed post about vim
  • surf - minimalistic web browser
  • thundering herd - computer science term when all processes wake up at once
  • fzf-mru - vim plugin that adds mru list of edited files accessible via fzf
  • targets.vim - vim plugin that adds more text objects, similar to surround.vim
  • context.vim - vim plugin that shows where you're at in nested code
  • tmux-complete.vim - complete text in vim from all tmux panes
  • silicon.vim - generate code screenshots from vim
  • bluz71 blog - interesting vim articles
  • greg hurrell vimcasts - on youtube and
  • ranger + fzf + ripgrep - cool idea
  • fzf wiki - lots of fzf ideas
  • fzf + bat - while searching, preview files via bat in fzf preview window
  • fzf + bfs - combine these to have a better better file selection list order
  • go in nerdtree - open file but leave cursor in nerdtree
  • markus kuhn - author of fixed x fonts
  • 6x13 - default fixed x font with alias "fixed"
  • bdf - bitmap x font format
  • pcf - newer bitmap x font format
  • switch.vim - vim plugin to switch between predefined often used patterns
  • vim-multiple-cursors - vim plugin to emulate multiple cursors
  • terryma dotfiles - many interesting dotfiles of github user terryma
  • vim-markdown - markdown syntax highlighting plugin for vim
  • cfilter.vim - vim plugin to filter and narrow down quick fix entries
  • zenburn color scheme - popular color scheme for vim
  • vim-move - vim plugin to quickly move lines of text around
  • gotbletu youtube channel - linux app reviews
  • traces.vim - live preview changes as you type :s/foo/bar
  • neomake.vim - to be explored, a vim plugin that runs commands asynchronously?
  • vim-galore - amazing vim tutorial
  • - most popular repositories with tagged vim
  • - most popular repositories with tagged neovim
  • terminus font - neat fixed bitmap font
  • proggy font - another neat fixed bitmap font
  • hack font - neat ttf font
  • chris siebenmann blog - advanced unix blog
  • nick janetakis - interesting youtube videos about vim
  • vim-obsession - vim plugin to manage vim sessions
  • fzf + wordnet - cool idea
  • nord color scheme - neat color scheme for vim and terminal
  • vim-conflicted - vim plugin that makes resolving git merge conflicts easier
  • vimconf jp videos - vim conference in japan on youtube
  • quickrun.vim - vim plugin to quickly run contents of file through a program
  • run or raise - run an app if it wasn't yet running, or focus it if it's running
  • neg-serg on github - user who made a cool i3 mod with run or raise and more
  • jumpapp - app that implements run or raise
  • marathon - another app that implements run or raise
  • shortcut.vim - preview available vim commands as you type them
  • codeface github repo - user's chrissimpkins collection of programming fonts
  • comp.fonts usenet faq - great explanation of font terminology
  • vim-qfedit - vim plugin to edit quickfix window entries
  • apprentice color scheme - nice dark color scheme
  • vimways - vim blog by romainl and robertmeta
  • xargs -I '{}' command '{}' - replace '{}' in command arguments with xargs input
  • bufselect.vim - bufexplorer alternative
  • philrunninger vim files - on github
  • shift+i in nerd tree - show hidden files
  • bitmap-fonts github repository by user tecate - fonts collection with screenshots
  • vim.wasm - vim implementation in wasm, works in a browser
  • vim-wordmotion - vim plugin that makes 'w' key work with camelcase words
  • notion window manager - static tiling window manager, successor of ion wm
  • echodoc.vim - vim plugin to display function prototypes in command line
  • neosolarized - color scheme for neovim
  • vim-submode - vim plugin to create your own modes
  • xnest - run x in x
  • xephyr - modern way to run x in x
  • paperwm - scrollable tiling window manager, interesting
  • - similar idea to paperwm
  • gilesorr wm summary - a list of all window managers and their descriptions
  • firefox public data report - firefox user hardware stats
  • termite - modal terminal emulator
  • i3spin - alt+tab for i3
  • i3ipc-python - python ipc bindings for i3, control i3 via python
  • set shortmess-=s - in vim, show match count even if there are 0 matches
  • i3-easyfocus - draws a letter on each window for quickly focusing
  • nq - queue tasks from command line, ts alternative
  • git-annex - add large files to git without tracking them
  • git-lfs - git-annex alternative
  • git-vfs - work with large git repos without creating a local repo copy
  • fdupes - find duplicate files
  • remacs - emacs rewritten in rust
  • commandlinefu top commands - useful commands to know
  • servo - a multi-threaded web browser engine written in rust
  • gtalug youtube channel - many linux videos
  • num utils - command line utilities for working with numbers
  • multitail - tail multiple files at once by splitting terminal in multiple windows
  • httping - ping via http
  • lnav - read multiple log files at once and correlate timestamps
  • :normal x - in vim, run normal mode command x
  • videos from 2010 to 2020 on youtube
  • moreutils - additional unix utilities
  • chronic in moreutils - run command quietly unless it fails
  • combine in moreutils - combine lines of files with and, or, not, xor operators
  • errno in moreutils - print error codes and names
  • ifdata in moreutils - print network interface info
  • ifne in moreutils - run a program if stdin is not empty
  • isutf8 in moreutils - check if a file has a valid utf8 encoding
  • mispipe in moreutils - pipe two commands and return exit code of first command
  • parallel in moreutils - run commands in parallel, often confused with gnu parallel
  • pee in moreutils - pipe stdin to multiple commands
  • sponge in moreutils - write stdin to a file
  • ts in moreutils - timestamp input
  • vidir in moreutils - rename and delete files and directories in vi
  • vipe in moreutils - insert vi in a pipe
  • zrun in moreutils - uncompress compressed files in command arguments
  • freebsd on a desktop - blog series at
  • linux app of the year - yearly question on linuxquestions
  • muttator - vim keyboard shortcuts for thunderbird
  • neomutt - mutt fork
  • zero, one, infinity - allow either 0 of something, or 1, or infinity, but not 2, 3, etc
  • necromancer dos navigator - file manager, mc alternative
  • pure bash bible - how to do everything in bash
  • shellharden - show bash script errors in red
  • how to do things safely in bash - shellharden tutorial on how to write safe bash
  • qdir - quad file manager with 4 splits, works in wine
  • tabbed - put apps that support xembed feature in tabs
  • pspg - view data in mysql and postgres databases
  • what are your favorite terminal programs - hacker news thread
  • iftop - top for network interfaces
  • atop - top/htop alternative
  • nethogs - top for process network activity
  • q - command line tool that parses tabular data with sql queries
  • gron - convert json to a format that can be grepped
  • wuzz - ncurses interface for http debugging
  • usql - utility to connect to any sql or nosql database
  • drawille - python library for drawing in the terminal using braille charset
  • dbeaver - gui for working with mysql and postgre, heidisql alternative
  • bpython - curses repl for python with suggestions
  • prompt-toolkit - python library for building interactive cli apps
  • noti - send a notification when a process completes
  • peco - fzf alternative
  • stdbuf - coreutils utility to modify buffering of commands
  • findmnt - find a mounted filesystem
  • rlwrap - add readline support to interactive cli programs that don't use it
  • colrm 1 5 - remove first five characters from input
  • namei - resolve symlinks and print full pathname of a file
  • tc netem - emulate network delay and packet loss
  • - blog about cli apps
  • must-watch-css - a list of css talks to watch on github
  • useful registry keys - wine doc about windows registry keys
  • eurobsdconf youtube videos - to watch talks on zfs, rust
  • vim-sandwich - vim plugin similar to surround.vim
  • inferno - os that is descendant of plan9
  • 9front - fork of plan9
  • acme - default text editor on plan9
  • ben eater crc videos on youtube - crc explained
  • brodie robertson - youtube videos about linux
  • wireguard - modern and simple vpn
  • delimitmate.vim - auto-pairs.vim alternative, automatically close ", (, ', etc
  • undotree.vim - vim plugin to visualize vim's undo tree
  • - learn things fast via examples
  • fcat - fast cat implementation
  • hello rust - a live coding youtube show about rust
  • peep - like less but creates a tiny preview window
  • fauxclip.vim - vim plugin to copy/paste things to/from system clipboard
  • tre - tree command alternative
  • qfenter.vim - vim plugin to open a quickfix entry in any open split
  • autocwd.vim - vim plugin that lets you change currently working dir of buffers
  • vim-lucius - a nice dark and light color scheme for vim
  • vim-forest-night - a nice dark color scheme for vim
  • tmux-fzf - tmux plugin that lets you fuzzy find sessions, windows and panes
  • vim-dirvish - select files and browse directories in vim, nerdtree alternative
  • rsi.vim - vim plugin that adds readline key bindings for vim
  • vim-sayonara - better bufkill.vim plugin
  • wildfire.vim - vim plugin to incrementally select closest text objects
  • vim-indent-object - plugin that adds indent text object, useful when writing python
  • flygrep.vim - vim plugin to asynchronously grep text
  • fz - add fzf matching to z
  • grabc - x utility to grab a pixel color
  • qalc - awesome cli calculator
  • vifm - another command line file manager
  • fff - another command line file manager
  • lf - another command line file manager
  • derek banas youtube lua tutorial - learn lua in 1 hr
  • z.lua - z alternative written in lua
  • lexima.vim - auto-pairs alternative
  • coc-pairs.vim - auto-pairs alternative
  • pear-tree.vim - auto-pairs alternative
  • - vim stories
  • the patient vimmer - advanced vim tutorial by romainl
  • learnvim.txt - vimdoc tutorial by barry arthur
  • - barry arthur's vim blog
  • - vim golfing
  • aerc - terminal email client, mutt/neomutt alternative
  • last status line for vim - blog post about how to customize vim's status line
  • - hundreds of unix commands explained
  • vim-table-mode - vim plugin to draw ascii tables in vim
  • zoom.vim - another vim plugin for zooming one window by dhruvasagar
  • caw.vim - another commenting vim plugin
  • editorconfig - config file for text editors to maintain consistent coding style
  • nrrwrgn.vim - vim plugin that allows focusing on a narrow region of text
  • vim-speeddating - vim plugin to inc/dec dates and times with ctrl+a/ctrl+z
  • tracyone dotfiles - github user tracyone has advanced dotfiles
  • gina.vim - vim plugin to use git from vim, fugitive alternative
  • gpick - color picker for x
  • cppman - c++ documentation in the command line
  • vim-cppman - vim plugin for cppman
  • vim-yoink - vim plugin to maintain yank history
  • vital.vim - collection of vim subroutines by japan vim user group
  • diffchar.vim - vim plugin that visualizes diff changes char by char
  • a-list-of-vims-lists - summary of all lists that vim internally maintains
  • vim-foldsearch - show only lines that match a pattern
  • area-41 - templates for creating vim plugins
  • :Cfilter - vim command to filter quickfix window entries
  • ferret - vim plugin to quickly search files and display results in quickfix window
  • quickfix-reflector - qfedit alternative, vim plugin to edit quickfix results
  • foo.vim - vim plugin with examples of how to write vim functions
  • quickfixsigns.vim - add marks next to line numbers for quickfix results
  • yankring.vim - vim plugin that maintains yank history
  • :h yankring-tutorial - yankring tutorial
  • slime.vim - send code to repl from vim
  • easyclip + neoyank - plugin combo for clipboard/yank management
  • vinegar.vim - vim plugin that improves built-in netrw plugin usage
  • slimv.vim - slime.vim alternative with swank protocol support
  • spacevim - vim distribution with latest features and plugins
  • mintree.vim - minimalistic reimplementation of nerdtree vim plugin
  • delta - another pretty diff tool
  • :colder - after filtering quickfix list, use this command to go back to unfiltered
  • defx.nvim - vim/neovim file explorer, alternative to nerdtree
  • vim-sort-motion - vim plugin that sorts data in a motion
  • vim-markbar - peekaboo for vim marks
  • :he quickref - concise summary of vim commands
  • vim-altr - vim plugin to alternate between related files
  • vim-tabpagecd - vim plugin to set the cwd for a tab
  • vim-smartinput - vim plugin auto-pairs and delimitmate alternative
  • - kana natsuno vim blog
  • vim-floaterm - vim plugin that creates a floating terminal window
  • i3-workspace-groups - create per project workspace groups
  • chrisbra vim_faq - github user chrisbra up to date vim faq
  • vis - vi-like editor based on plan9 structural regular expressions
  • dvtm - tmux alternative
  • abduco - add sessions to dvtm
  • - public git repo, interesting to sort repos by date
  • how to boost your vim productivity - blog post about vim and tmux productivity
  • kakoune - text editor that is similar to vim
  • vimlondon videos - vim videos to watch on vimeo
  • gi - vim command to enter insert mode in the last insert position
  • i3ass - i3 assistance tools, written using i3 ipc
  • budlabs - i3ass author's youtube channel
  • i3run from i3 assistance tools - run or raise an app in i3
  • michael stapelberg - author of i3, @zekjur on twitter
  • garbage podcast - unix podcast
  • colorizer.vim - vim plugin to colorize css colors and ansi escape codes
  • ranger + autojump - cool idea
  • read man pages in vim - cool idea
  • qtile - tiling window manager written and configured in python
  • vimpager - vim plugin to make vim act like a pager
  • vim-man - vim plugin to read man pages
  • dispatch.vim - vim plugin to run make and tests asynchronously
  • tmux-navigator - vim plugin to navigate between vim splits and tmux panes
  • udiskie - auto mount usb
  • checkinstall - utility to track make install files
  • arch linux aur - sort by votes to find interesting apps
  • bracketed paste - terminal escape sequences for raw pasting
  • htop-vim - htop with vim keybindings
  • set scrollbind - make vim scroll two windows synchronously
  • debian stretch - codename for debian 9
  • debian buster - codename for debian 10
  • debian bullseye - codename for debian 11
  • debian bookworm - codename for debian 12
  • debian sid - unstable rolling debian branch
  • autocutsel - sync cutbuffer and clipboard and optionally also primary
  • scripts page - sort by downloads to find interesting plugins
  • - vim tips wiki
  • - alan kay wiki
  • 2bwm - floating keyboard-driven window manager

See you next time!

Nineteenth site in online tools network:

At Browserling we're building a network of online tools websites. Each site focuses on one and only one tool category. Each tool does one and only one thing.

Today we're releasing the nineteenth site – Online Unicode Tools.

Online Unicode Tools is a collection of simple, free and easy to use utilities for working with Unicode data. There are no ads, popups, or other garbage. Just Unicode utilities that work in your browser. Load Unicode and instantly get the result!

Here's a list of all Unicode tools so far:

Here are the upcoming Unicode tools:

  • Find the Names of Unicode Symbols
  • URL-encode Unicode
  • URL-decode Unicode
  • Convert Binary to Unicode
  • Convert Octal to Unicode
  • Convert Decimal to Unicode
  • Convert Hex to Unicode
  • Convert Unicode to Any Base
  • Convert Any Base to Unicode
  • Convert Unicode to ASCII
  • Convert ASCII to Unicode
  • Convert Unicode to Latin1
  • Convert Latin1 to Unicode
  • Convert Unicode to Bytes
  • Convert Bytes to Unicode
  • Sort Unicode
  • Validate Unicode
  • Convert Unicode to Punycode
  • Convert Punycode to Unicode
  • Decode Base64 to Unicode
  • Encode Unicode to Data URI
  • Decode Data URI to Unicode
  • Convert HTML to Unicode
  • Convert UTF8 to Unicode
  • Convert UTF16 to Unicode
  • Convert UTF32 to Unicode
  • Convert Unicode to Uppercase
  • Convert Unicode to Lowercase
  • Convert Unicode to Randomcase
  • Convert Unicode to Lowercase
  • JSON Stringify Unicode
  • JSON Parse Unicode
  • Analyze Unicode
  • Let Zalgo Destroy Unicode

The first eighteen websites in the network are:

The next few sites are onlineHASHtools, onlineGIFtools, onlineBITMAPtools, onlinePDFtools, onlineBROWSERtools, onlineCRYPTOtools, onlineAUDIOtools, onlineCSStools, onlineJStools, and a dozen more.

See you next time!

Announcing the Curl Cookbook

I and my team at Browserling just created the Curl Cookbook. It contains over a dozen organic, nutritious, and completely irresistible recipes for quickly getting the everyday curl tasks done.

Here are all the recipes in the Curl Cookbook:

I'll be adding more recipes to Curl's Cookbook and will also create several more cookbooks for other technologies that I often use, such as dtrace, netcat, dig, wget, iptables, and lsof.

See you all then!


I and my team at Browserling just released It's a neat math news aggregator that collects news titles from the top 20 math blogs and websites and has a super fast search. Check it out!

Other websites in our URLs network are:

  • FinUrls – a finance news aggragator
  • SciUrls – a science news aggragator
  • TechUrls – a technology news aggragator
  • DevUrls – a developer news aggragator

Check them out as well and see you next time!

Eighteenth site in online tools network:

At Browserling we're building a network of online tools websites. Each site focuses on one and only one tool category. Each tool does one and only one thing.

Today we're releasing the eighteenth site – Online Fractal Tools.

Online Fractal Tools is a collection of simple, free and easy to use utilities for doing all kinds of fractaly things. There are no ads, popups or other garbage. Just fractal utilities that work in your browser. Press a button – get a fractal!

Here's a list of all fractal tools so far.

Draw a Dendrite Fractal that looks like this:

Draw a Canopy Fractal that looks like this:

Draw a Flowsnake Fractal that looks like this:

Draw a Morton Fractal that looks like this:

Draw a Hilbert Fractal that looks like this:

Draw a V-fractal that looks like this:

Draw a Peano Fractal that looks like this:

Draw a Dragon Fractal that looks like this:

Draw a Twin Dragon Fractal that looks like this:

Draw a Triangle Dragon Fractal that looks like this:

Draw a Koch Fractal that looks like this:

Draw a Triflake Fractal that looks like this:

Draw a Sierpinski Fractal that looks like this:

Draw a Pentaflake Fractal that looks like this:

Draw a Hexaflake Fractal that looks like this:

Draw a Multiflake Fractal that looks like this:

Draw a Moore Fractal that looks like this:

Draw a Cantor Fractal that looks like this:

Draw a Dust Fractal that looks like this:

Draw a Levy Fractal that looks like this:

Draw a Frosty Fractal that looks like this:

Draw a Pythagoras Fractal that looks like this:

Draw a T-square Fractal that looks like this:

Draw a Hausdorff Fractal that looks like this:

Here are the upcoming fractal tools:

  • Generate a Hilbert Sequence
  • Enumerate a Hilbert Fractal
  • Generate a Peano Sequence
  • Enumerate a Peano Fractal
  • Generate a Moore Sequence
  • Enumerate a Moore Sequence
  • Generate a Cantor String
  • Draw a Mandelbrot Tree
  • Draw a Barnsey Tree
  • Draw a Barnsey's Fern
  • Draw a Binary Fractal Tree
  • Draw a Ternary Fractal Tree
  • Draw a Dragon Fractal Tree
  • Draw a De Rham Fractal
  • Draw a Takagi Fractal
  • Draw a Peano Pentagon Fractal
  • Draw a Tridendrite Fractal
  • Draw a McWorter Pentigree Fractal
  • Draw a McWorter Lucky Seven Fractal
  • Draw an Eisenstein Fractions Fractal
  • Draw a Bagula Double V Fractal
  • Draw a Julia Set
  • Draw a Mandelbrot Set
  • Draw a Toothpick Fractal
  • Draw a Ulam-Warburton Fractal

The first seventeen websites in the network are:

The next few sites are onlineHASHtools, onlineGIFtools, onlineBMPtools, onlinePDFtools, onlineBROWSERtools, onlineCRYPTOtools, onlineAUDIOtools, onlineCSStools, onlineJStools, and then 999 more.

See you next time!

Announcing catonmat tools

Over the last couple of years I and my team at Browserling have created hundreds of tiny browser-based utilities for getting things done. At first we created Browserling's developer tools and later we created an online tools network. These tools are now used millions of times every month. Today I'm replicating this success and launching catonmat tools. Catonmat tools are a simplified and improved version of existing tools.

Here are the first 15 tools that I've added:

I'll be adding thousands of new tools throughout this century and I'll post quick updates about them every now and then.

See you all then!

Read more articles →
Thanks for reading my articles. If you enjoyed them and would like to receive my new articles automatically, you can subscribe via rss feed or email.