HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
terryma
vim-multiple-cursors
Vim Script2013–2021
terryma / vim-multiple-cursors

vim-multiple-cursors

True Sublime Text style multiple selections for Vim

26Distinct people
26Mentions
0Explicit recommenders
7.9KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

True Sublime Text style multiple selections for Vim

GitHub

Where it is used

No documented product use was verified in the last source check.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 3:03:16 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year26 dated mentions

Observed mentions: 2013-04-14 04:52:00 UTC to 2021-05-26 16:56:58 UTC.

02462013-01-01 00:00:00 UTC to 2014-01-01 00:00:00 UTC (exclusive): 5 mentions; 1 submissions, 4 comments20132014-01-01 00:00:00 UTC to 2015-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2015-01-01 00:00:00 UTC to 2016-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 6 mentions; 0 submissions, 6 comments20172018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 3 mentions; 1 submissions, 2 comments2020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2021

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20132013-01-01 00:00:00 UTC2014-01-01 00:00:00 UTC514
20142014-01-01 00:00:00 UTC2015-01-01 00:00:00 UTC303
20152015-01-01 00:00:00 UTC2016-01-01 00:00:00 UTC303
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC000
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC606
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC202
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC312
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC303
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC101

From the project README

An excerpt from the repository, fetched Nov 13, 2026.

Read the project’s introduction
❗ This plugin is deprecated, use vim-visual-multi instead ❗ vim-multiple-cursors Contents About Installation Quick Start Mapping Settings Interactions with other plugins Highlight FAQ Contributing Credit About There have been many attempts at bringing Sublime Text's awesome multiple selection feature into Vim, but none so far have been in my opinion a faithful port that is simplistic to use, yet powerful and intuitive enough for an existing Vim user. vim-multiple-cursors is yet another attempt at that. It's great for quick refactoring Vim command sequence: fp<C-n><C-n><C-n>cname Add a cursor to each line of your visual selection Vim command sequence: vip<C-n>i"<Right><Right><Right>",<Esc>vipgJ$r]Idays = [ Match characters from visual selection Vim command sequence: df[$r,0f,v<C-n>…<C-n>c<CR><Up><Del><Right><Right><Right><Del> Use the command to match regexp To see what keystrokes are used for the above examples, see the wiki page. Installation Install using Pathogen, Vundle, Neobundle, vim-plug, or your favorite Vim package manager. Requires vim 7.4 or newer for full functionality. vim-plug instructions Paste this block into the top of ~/.vimrc. call plug#begin() Plug 'terryma/vim-multiple-cursors' call plug#end() Start vim and execute :PlugInstall. Quick Start normal mode / visual mode start: <C-n> start multicursor and add a virtual cursor + selection on the match next: <C-n> add a new virtual cursor + selection on the next match skip: <C-x> skip the next match prev: <C-p> remove current virtual cursor + selection and go back on previous match select all: <A-n> start multicursor and directly select all matches You can now change the virtual cursors + selection with visual mode commands. For instance: c, s, I, A work without any issues. You could also go to normal mode by pressing v and use normal commands there. At any time, you can press <Esc> to exit back to regular Vim. NOTE: start with g<C-n> to match without boundaries (behaves like g* instead of *) visual mode when multiple lines are selected start: <C-n> add virtual cursors on each line You can now change the virtual cursors with normal mode commands. For instance: ciw. command The command MultipleCursorsFind accepts a range and a pattern (regexp), it creates a visual cursor at the end of each match. If no range is passed in, then it defaults to the entire buffer. Mapping If you don't like the plugin taking over your key bindings, you can turn it off and reassign them the way you want: let g:multi_cursor_use_default_mapping=0 " Default mapping let g:multi_cursor_start_word_key = '<C-n>' let g:multi_cursor_select_all_word_key = '<A-n>' let g:multi_cursor_start_key = 'g<C-n>' let g:multi_cursor_select_all_key = 'g<A-n>' let g:multi_cursor_next_key = '<C-n>' let g:multi_cursor_prev_key = '<C-p>' let g:multi_cursor_skip_key = '<C-x>' let g:multi_cursor_quit_key = '<Esc>' NOTE: Please make sure to always map something to g:multi_cursor_quit_key, otherwise you'll have a tough time quitting from multicursor mode. Settings Currently there are four additional global settings one can tweak: g:multi_cursor_support_imap (Default: 1) If set to 0, insert mappings won't be supported in Insert mode anymore. g:multi_cursor_exit_from_visual_mode (Default: 0) If set to 1, then pressing g:multi_cursor_quit_key in Visual mode will quit and delete all existing cursors, just skipping normal mode with multiple cursors. g:multi_cursor_exit_from_insert_mode (Default: 0) If set to 1, then pressing g:multi_cursor_quit_key in Insert mode will quit and delete all existing cursors, just skipping normal mode with multiple cursors. g:multi_cursor_normal_maps (Default: see below) {'@': 1, 'F': 1, 'T': 1, '[': 1, '\': 1, ']': 1, '!': 1, '"': 1, 'c': 1, 'd': 1, 'f': 1, 'g': 1, 'm': 1, 'q': 1, 'r': 1, 't': 1, 'y': 1, 'z': 1, '<': 1, '=': 1, '>': 1} Any key in this map (values are ignored) will cause multi-cursor Normal mode to pause for map completion just like normal vim. Otherwise keys mapped in normal mode will "fail to replay" when multiple cursors are active. For example: {'d':1} makes normal-mode command dw work in multi-cursor mode. The default list contents should work for anybody, unless they have remapped a key from an operator-pending command to a non-operator-pending command or vice versa. These keys must be manually listed because vim doesn't provide a way to automatically see which keys start mappings, and trying to run motion commands such as j as if they were operator-pending commands can break things. g:multi_cursor_visual_maps (Default: see below) {'T': 1, 'a': 1, 't': 1, 'F': 1, 'f': 1, 'i': 1} Same principle as g:multi_cursor_normal_maps Interactions with other plugins Multiple_cursors_before/Multiple_cursors_after (Default: nothing) Other plugins may be incompatible in insert mode. That is why we provide hooks to disable those plug-ins when vim-multiple-cursors is active: For example, if you are using Neocomplete, add this to your vimrc to prevent conflict: function! Multiple_cursors_before() if exists(':NeoCompleteLock')==2 exe 'NeoCompleteLock' endif endfunction function! Multiple_cursors_after() if exists(':NeoCompleteUnlock')==2 exe 'NeoCompleteUnlock' endif endfunction Plugins themselves can register User autocommands on MultipleCursorsPre and MultipleCursorsPost for automatic integration. Highlight The plugin uses the highlight group multiple_cursors_cursor and multiple_cursors_visual to highlight the virtual cursors and their visual selections respectively. You can customize them by putting something similar like the following in your vimrc: " Default highlighting (see help :highlight and help :highlight-link) highlight multiple_cursors_cursor term=reverse cterm=reverse gui=reverse highlight link multiple_cursors_visual Visual FAQ Q Pressing i after selecting words with C-n makes the plugin hang, why
Read the full README on GitHub

What Hacker News says

26 sources
For your use case there are a lot of ways to do that in Vim without using the multi cursor, here[0] is one thing I just recorded to show you a glimpse of what's possible with just a search and replace: I just find a pattern and replace it with a part of the same pattern. > Here is a good video example (https://youtu.be/iomWEDMBlcE) Again, you can do everything here without using multicursors, just record a macro for one line and repeat with a count and you're set. Now if you absolutely want the multicursor feature, there are more than one plugin[1][2] for that, but I never felt the urge to use multiple cursors in Vim. 0: https://youtu.be/YR7rRC-vwj4 1: https://github.com/terryma/vim-multiple-cursors 2: https://github.com/paradigm/vim-multicursor
In How Did Vim Become So Popular?
There's a couple of ways you could tackle editing that depending on what your json looks like. For example you could use the visual block mode (ctrl-v) and highlight to the end of the line using $ and then use A to edit the end of every line at the same time. That works with lines of different length. Or you could use a regex inside of a block selection. Or there's a multi-cursor plugin available for the same approach as you're currently using in VSCode: https://github.com/terryma/vim-multiple-cursors Vim Golf is an excellent resource for seeing how to efficiently edit things in Vim: https://www.vimgolf.com/
In How Did Vim Become So Popular?
> Using Vim without knowing WAY more than this article is an anti-pattern. VIM is about composing small and straightforward operations, like in functional programming. So with several primitives you get a lot of combinations. So the idea actually is the opposite: Learn just a few primitives and get your shit done using the combinations, which can be very flexible and powerful. > you have to learn a lot more than these tricks and hacks to be proficient The techniques highlighted in this article are not tricks nor hacks. It's actually more like VIM 101. Surely VIM has a lot of hacks but these definitely aren't among those. You don't sound very informed about VIM here. > Obviously an IDE with intellisense and multiple cursors is more efficient than most of Vim's efficiency hacks. Obvious to you, maybe. Funny you believe that something that h
Read the rest
as caused a shitload of controversy can actually be obvious. Please don't serve your personal opinion as being "obvious". To me, and I'd say to many others, it's not only not obvious, but "obviously" wrong. Also VIM has multiple cursors for some time albeit as a plugin: https://github.com/terryma/vim-multiple-cursors > Vim is inefficient for editing > Vim's efficiency gains more apply to editing text, not structured code. First of all, structured code is text, so Vim's efficiency gains have to apply to it as well, there can't be any denying that. On top of plain text, VIM has other easily applicable features for structured code such as text objects, folding, highlighting, auto-completion and tag-browsing. These are not very hard to get right. > If you aren't proficient in Vim's garbage VimL then keep learning VimL really is garbage, I'll give you that. The trick is that you don't really need to learn it. I'm a ~10 years VIM user and still don't know anything about the VimL syntax (intentionally). The secret is that you can have a very effective VIM config around ~50 lines which itself mostly consists of settings, file type specific settings and aliases. But if you try to make VIM behave as something it wasn't meant to be, you'll be sorry. I think that the confusion comes from the tendency of comparing VIM to IDEs, as well as trying to make VIM behave like IDEs. In my opinion, most people in the VIM community are "guilty" of this as well. If you need an IDE, but you want VIM's mode and command composition driven approaches and keybindings as well; the wiser choice would probably be a modern IDE that supports a VIM mode. For me, stuff like popping fancy file browsers or git wrappers from VIM is not what I'm looking for in the VIM experience. But if what one wants is to get stuff done in the terminal; then one should learn a couple of UNIX tools instead of installing a gazillion of VIM plugins. In short, if you need a modern IDE, use a freaking modern IDE. No need to make ignorant comments about our beloved VIM.
In Vim Anti-Patterns (2012)
You can do multiple cursors with Vim: https://github.com/terryma/vim-multiple-cursors I don't use them because if I want to change text in multiple places, you can highlight the lines where you want to change it, for example the current line to line 57 would be: V57G. Then to change `foo` to `bar` type: :s/foo/bar/g and the replacements will take place within the selected range. If you only want to change some of them add a c on the end of the command. Column selections: `ctrl-v`. I'm not sure what kind of live feedback you mean, but Vim gives multiple forms of feedback, depending on what plugins are installed.
In Keep VS Code from Becoming an IDE
That video is great. The multiple cursors GUI is a brilliant way to visualize a repetitive operation (i.e., one that often would be recorded and executed by macro). I was going to ask if anyone else implements it, but I thought I'd search first. Does anyone know more about it? Its origins? More functionality? * Vim https://github.com/terryma/vim-multiple-cursors * Atom (I'm not sure if it's the same functionality) https://atom.io/packages/multi-cursor https://www.lynda.com/Web-Development-tutorials/Selections-m... * Sublime https://stackoverflow.com/questions/14963775/multiple-cursor... EDIT: Well it seems like Sublime has had this feature since at least 2012. I suppose I should have considered text editors besides Vim, and I might have known sooner. I'll leave this post in case there are others as narrow-minded as I am ...
In Why I like Vim so much [video]
https://github.com/lunixbochs/ActualVim gives you neovim inside Sublime Text, altho I haven't tried it. I couldn't stand IdeaVim, the one for the Jetbrains IntelliJ platform - felt very buggy. Such as when you open a modal and it remains in Normal mode so you can't enter text. Currently using https://github.com/VSCodeVim/Vim when using VSCode which is better but still got some rough edges. Despite a fair bit of use and study - mostly using neovim - I feel that I haven't got as much from vim as I'd expected or hoped. Switching from Normal to Insert mode - even when you get good at the one-time Normal mode commands - doesn't always elegant. There's all sorts of configurations and plugins that try to plug the gaps, but it's such a huge effort to assemble them all. For example, just installed https://github.com/terryma/vim-multiple-cursors to
Read the rest
day to attempt get the elegant multiple selection of modern text editors.
In Why I like Vim so much [video]

Showing the 15 most recent of 26 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.