*vim-multiple-cursors.txt* True Sublime Text multiple selection in Vim ____ _ __ ____ ___ __ __/ / /_(_)___ / /__ _______ ________________ __________ / __ `__ \/ / / / / __/ / __ \/ / _ \ / ___/ / / / ___/ ___/ __ \/ ___/ ___/ / / / / / / /_/ / / /_/ / /_/ / / __/ / /__/ /_/ / / (__ ) /_/ / / (__ ) /_/ /_/ /_/\__,_/_/\__/_/ .___/_/\___/ \___/\__,_/_/ /____/\____/_/ /____/ /_/ Reference Manual~ ============================================================================== CONTENTS *multiple-cursors-contents* 1.Intro...................................|multiple-cursors-intro| 2.Usage...................................|multiple-cursors-usage| 3.Mappings................................|multiple-cursors-mappings| 4.Global Options..........................|multiple-cursors-global-options| 5.Interactions with other plugins.........|multiple-cursors-other-plugins| 6.Highlight...............................|multiple-cursors-highlight| 7.FAQ.....................................|multiple-cursors-faq| 8.Contributing............................|multiple-cursors-contributing| 9.License.................................|multiple-cursors-license| 10.Credit..................................|multiple-cursors-credit| 11.References..............................|multiple-cursors-references| ============================================================================== 1. Intro *multiple-cursors-intro* There [1] have [2] been [3] many [4] attempts [5] at bringing Sublime Text's awesome multiple selection [6] 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. ============================================================================== 2. Usage *multiple-cursors-usage* normal mode / visual mode~ - start: `` start multicursor and add a virtual cursor + visual selection on the match + next: `` add a new virtual cursor + visual selection on the next match + skip: `` skip the next match + prev: `` remove current virtual cursor + visual selection and go back on previous match - select all: `` start muticursor and directly select all matches You can now change the virtual cursors + visual 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 `` to exit back to regular Vim. NOTE: start with `g` to match without boundaries (behaves like `g*` instead of `*`, see |gstar|) visual mode when multiple lines are selected~ - start: `` 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. ============================================================================== 3. Mappings *multiple-cursors-mappings* If you don't like the plugin taking over your favorite key bindings, you can turn off the default with > let g:multi_cursor_use_default_mapping=0 " Default mapping let g:multi_cursor_start_word_key = '' let g:multi_cursor_select_all_word_key = '' let g:multi_cursor_start_key = 'g' let g:multi_cursor_select_all_key = 'g' let g:multi_cursor_next_key = '' let g:multi_cursor_prev_key = '' let g:multi_cursor_skip_key = '' let g:multi_cursor_quit_key = '' < 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. ============================================================================== 4. Global Options *multiple-cursors-global-options* 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 0, then pressing |g:multi_cursor_quit_key| in |visual-mode| will quit and delete all existing cursors, 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, 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: ) `{'T': 1, 'a': 1, 't': 1, 'F': 1, 'f': 1, 'i': 1}` Same principle as |g:multi_cursor_normal_maps| ============================================================================== 5. Interactions with other plugins *multiple-cursors-other-plugins* 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| |autocommand| on `MultipleCursorsPre` and `MultipleCursorsPost` for automatic integration. ============================================================================== 6. Highlight *multiple-cursors-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 ============================================================================== 7. FAQ *multiple-cursors-faq* Q: Pressing after selecting words with makes the plugin hang, why? A: When selecting words with , the plugin behaves like in `visual` mode. Once you pressed , you can still press to insert text. Q: doesn't seem to work in VIM but works in gVIM, why? A: This is a well known terminal/Vim [9], different terminal have different ways to send `Alt+key`. Try adding this in your `.vimrc` and make sure to replace the string: > if !has('gui_running') map "in Insert mode, type Ctrl+v Alt+n here" endif Or remap the following: > g:multi_cursor_start_key g:multi_cursor_select_all_key Q: doesn't seem to work in gVIM? A: Try setting `set selection=inclusive` in your `~/.gvimrc` Q: deoplete insert giberrish, how to fix this? A: use the `Multiple_cursors` functions, add this in your vimrc: > func! Multiple_cursors_before() if deoplete#is_enabled() call deoplete#disable() let g:deoplete_is_enable_before_multi_cursors = 1 else let g:deoplete_is_enable_before_multi_cursors = 0 endif endfunc func! Multiple_cursors_after() if g:deoplete_is_enable_before_multi_cursors call deoplete#enable() endif endfunc Q: is it also working on Mac? A: On Mac OS, MacVim[10] is known to work. Q: How can I select `n` keywords with several keystrokes? `200` does not work. A: You can use :MultipleCursorsFind keyword. I have this binding in my vimrc: > nnoremap :MultipleCursorsFind / vnoremap :MultipleCursorsFind / This allows one to search for the keyword using `*` and turn search results into cursors with `Alt-j`. ============================================================================== 8. Contributing *multiple-cursors-contributing* The project is hosted on Github. Patches, feature requests and suggestions are always welcome! Find the latest version of the plugin here: http://github.com/terryma/vim-multiple-cursors ============================================================================== 9. License *multiple-cursors-license* The project is licensed under the MIT license [7]. Copyright 2013 Terry Ma ============================================================================== 10. Credit *multiple-cursors-credit* The plugin is obviously inspired by Sublime Text's awesome multiple selection [6] feature. Some inspiration was also taken from Emac's multiple cursors [8] implementation. ============================================================================== 10. References *multiple-cursors-references* [1] https://github.com/paradigm/vim-multicursor [2] https://github.com/felixr/vim-multiedit [3] https://github.com/hlissner/vim-multiedit [4] https://github.com/adinapoli/vim-markmultiple [5] https://github.com/AndrewRadev/multichange.vim [6] http://www.sublimetext.com/docs/2/multiple_selection_with_the_keyboard.html [7] http://opensource.org/licenses/MIT [8] https://github.com/magnars/multiple-cursors.el [9] http://vim.wikia.com/wiki/Get_Alt_key_to_work_in_terminal [10] https://code.google.com/p/macvim vim:tw=78:sw=4:ft=help:norl: