251 lines
11 KiB
Text
251 lines
11 KiB
Text
|
*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: `<C-n>` start multicursor and add a virtual cursor + visual selection on the match
|
||
|
+ next: `<C-n>` add a new virtual cursor + visual selection on the next match
|
||
|
+ skip: `<C-x>` skip the next match
|
||
|
+ prev: `<C-p>` remove current virtual cursor + visual selection and go back on previous match
|
||
|
- select all: `<A-n>` 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 `<Esc>` to exit back to regular Vim.
|
||
|
|
||
|
NOTE: start with `g<C-n>` to match without boundaries (behaves like `g*` instead of `*`, see |gstar|)
|
||
|
|
||
|
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.
|
||
|
|
||
|
==============================================================================
|
||
|
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 = '<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.
|
||
|
|
||
|
==============================================================================
|
||
|
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 <i> after selecting words with <C-n> makes the plugin hang, why?
|
||
|
A: When selecting words with <C-n>, the plugin behaves like in `visual` mode.
|
||
|
Once you pressed <i>, you can still press <I> to insert text.
|
||
|
|
||
|
Q: <A-n> 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" <A-n>
|
||
|
endif
|
||
|
Or remap the following: >
|
||
|
g:multi_cursor_start_key
|
||
|
g:multi_cursor_select_all_key
|
||
|
|
||
|
Q: <C-n> 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<C-n>` does not work.
|
||
|
A: You can use :MultipleCursorsFind keyword. I have this binding in my vimrc: >
|
||
|
nnoremap <silent> <M-j> :MultipleCursorsFind <C-R>/<CR>
|
||
|
vnoremap <silent> <M-j> :MultipleCursorsFind <C-R>/<CR>
|
||
|
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:
|