JohnBeckett (talk | contribs) m (Reverted edits by 86.162.223.4 (talk | block) to last version by 212.59.43.2) |
|||
Line 15: | Line 15: | ||
<pre> |
<pre> |
||
xp |
xp |
||
− | Shakespeare ensures that another significant moment |
||
</pre> |
</pre> |
||
Revision as of 07:32, 11 October 2010
Normal-mode commands
Swap the current character (the character under the cursor) with the next:
xp
Swap the current line with the next:
ddp
Swap the current line with the previous:
ddkP
Swap the current word with the next (see note):
dawwP dawelp "xdiwdwep"xp (works with most punctuations too)
Swap the current word with the previous (see note):
dawbP
Note: These swap-word techniques don't work with punctuation. Use the mappings below to more intelligently move words.
Normal-mode mappings
To use gc to swap the current character with the next, without changing the cursor position:
:nnoremap <silent> gc xph
To use gw to swap the current word with the next, without changing cursor position: (See note.)
:nnoremap <silent> gw "_yiw:s/\(\%#\w\+\)\(\W\+\)\(\w\+\)/\3\2\1/<CR><c-o><c-l> " This version will work across newlines: :nnoremap <silent> gw "_yiw:s/\(\%#\w\+\)\(\_W\+\)\(\w\+\)/\3\2\1/<CR><c-o><c-l>
To use gl to swap the current word with the previous, keeping cursor on current word: (This feels like "pushing" the word to the left.) (See note.)
:nnoremap <silent> gl "_yiw?\w\+\_W\+\%#<CR>:s/\(\%#\w\+\)\(\_W\+\)\(\w\+\)/\3\2\1/<CR><c-o><c-l>
To use gr to swap the current word with the next, keeping cursor on current word: (This feels like "pushing" the word to the right.) (See note.)
:nnoremap <silent> gr "_yiw:s/\(\%#\w\+\)\(\_W\+\)\(\w\+\)/\3\2\1/<CR><c-o>/\w\+\_W\+<CR><c-l>
To use g{ to swap the current paragraph with the next:
:nnoremap g{ {dap}p{
Note: Mappings above which perform a search-and-replace (ones containing :s/) will operate incorrectly on words with accented characters. To adjust the mappings above to work with your locale, replace all \w with [alphabet] and \W with [^alphabet], where alphabet is the set of characters in your alphabet. :help /\w
Visual-mode swapping
To use this mapping: first, delete some text (using any normal Vim command, such as daw, dt, in normal mode, x in visual mode). Then, use visual mode to select some other text, and press Ctrl-X. The two pieces of text should then be swapped.
:vnoremap <C-X> <Esc>`.``gvP``P
See also
- Transposing script to move current or selected lines up/down
- Visual Mode Based Swapping script by Chip Campbell to swap visually-selected text