UnconditionalPaste : Force character-/line-/block-wise paste, regardless of how it was yanked.
| script karma |
Rating 34/10,
Downloaded by 490
|
Comments, bugs, improvements
|
Vim wiki
|
| created by |
| Ingo Karkat |
| |
| script type |
| utility |
| |
| description |
DESCRIPTION
If you're like me, you occasionally do a linewise yank, and then want to
insert that yanked text in the middle of some other line (or vice versa).
The mappings defined by this plugin will allow you to do a character-, line-,
or block-wise paste no matter how you yanked the text, both from normal and
insert mode.
Often, the register contents aren't quite in the form you need them. Maybe you
need to convert yanked lines to comma-separated arguments, maybe join the
lines with another separator, maybe the reverse: un-joining a single line on
some pattern to yield multiple lines. Though you can do the manipulation after
pasting, this plugin offers shortcut mappings for these actions, which are
especially helpful when you need to repeat the paste multiple times.
SOURCE
Based on vimtip #1199 by cory,
http://vim.wikia.com/wiki/Unconditional_linewise_or_characterwise_paste
RELATED WORKS
- whitespaste.vim (vimscript #4351) automatically removes blank lines around
linewise contents, and condenses inner lines to a single one. By default, it
remaps p / P, but this can be changed.
USAGE
["x]gcp, ["x]gcP Paste characterwise (newline characters and indent are
flattened to spaces) [count] times.
["x]glp, ["x]glP Paste linewise (even if yanked text is not a complete
line) [count] times.
["x]gbp, ["x]gbP Paste blockwise (inserting multiple lines in-place,
pushing existing text further to the right) [count]
times.
["x]g]p, ["x]g[P or Paste linewise (even if yanked text is not a complete
["x]g]P or line) [count] times like glp, but adjust the indent
["x]g[p to the current line (like ]p) .
["x]g,p, ["x]g,P Paste characterwise, with each line delimited by ", "
instead of the newline (and indent).
["x]gqp, ["x]gqP Query for a separator string, then paste
characterwise, with each line delimited by it.
["x]gQp, ["x]gQP Paste characterwise, with each line delimited by the
previously queried (gqp) separator string.
["x]gup, ["x]guP Query for a separator pattern, un-join the register
contents, then paste linewise.
["x]gUp, ["x]gUP Un-join the register contents on the previously
queried (gup) separator pattern, then paste
linewise.
["x]gpp, ["x]gpP Paste with the first decimal number found on or after
the current cursor column (or the overall first
number, if no such match, or the last number, if the
cursor is at the end of the line) incremented /
decremented by 1.
Do this [count] times, with each paste further
incremented / decremented.
["x]gPp, ["x]gPP Paste with all decimal numbers incremented /
decremented by 1.
Do this [count] times, with each paste further
incremented / decremented.
CTRL-R CTRL-C {0-9a-z"%#*+/:.-}
Insert the contents of a register characterwise
(newline characters and indent are flattened to
spaces).
If you have options like 'textwidth', 'formatoptions',
or 'autoindent' set, this will influence what will be
inserted.
CTRL-R , {0-9a-z"%#*+/:.-}
Insert the contents of a register characterwise, with
each line delimited by ", " instead of the newline
(and indent).
CTRL-R CTRL-Q {0-9a-z"%#*+/:.-}
Query for a separator string, then insert the contents
of a register characterwise, with each line delimited
by it.
CTRL-R CTRL-Q CTRL-Q {0-9a-z"%#*+/:.-}
Insert the contents of a register characterwise, with
each line delimited by the previously queried (gqp,
i_CTRL-R_CTRL-Q) separator string.
CTRL-R CTRL-U {0-9a-z"%#*+/:.-}
Query for a separator pattern, un-join the contents of
a register, then insert it linewise.
CTRL-R CTRL-U CTRL-U {0-9a-z"%#*+/:.-}
Un-join the contents of
a register on the previously queried (gup,
i_CTRL_R_CTRL-U) pattern, then insert it linewise. |
| |
| install details |
INSTALLATION
This script is packaged as a vimball. If you have the "gunzip" decompressor
in your PATH, simply edit the *.vmb.gz package in Vim; otherwise, decompress
the archive first, e.g. using WinZip. Inside Vim, install by sourcing the
vimball or via the :UseVimball command.
vim UnconditionalPaste*.vmb.gz
:so %
To uninstall, use the :RmVimball command.
DEPENDENCIES
- Requires Vim 7.0 or higher.
- repeat.vim (vimscript #2136) plugin (optional)
CONFIGURATION
For a permanent configuration, put the following commands into your vimrc:
The default separator string for the gQp and i_CTRL-R_CTRL-Q_CTRL-Q
mappings is a <Tab> character; to preset another one (it will be overridden by
gqp and i_CTRL-R_CTRL-Q), use:
let g:UnconditionalPaste_JoinSeparator = 'text'
The default separator pattern for the gUp and i_CTRL-R_CTRL-U_CTRL-U
mappings matches any whitespace and newlines (i.e. it will get rid of empty
lines); to preset another one (it will be overridden by gup and
i_CTRL-R_CTRL-U), use:
let g:UnconditionalPaste_UnjoinSeparatorPattern = '-'
If you want to use different mappings (e.g. starting with <Leader>), map your
keys to the <Plug>UnconditionalPaste... mapping targets _before_ sourcing this
script (e.g. in your vimrc):
nmap <Leader>Pc <Plug>UnconditionalPasteCharBefore
nmap <Leader>pc <Plug>UnconditionalPasteCharAfter
nmap <Leader>Pl <Plug>UnconditionalPasteLineBefore
nmap <Leader>pl <Plug>UnconditionalPasteLineAfter
nmap <Leader>Pb <Plug>UnconditionalPasteBlockBefore
nmap <Leader>pb <Plug>UnconditionalPasteBlockAfter
nmap <Leader>Pi <Plug>UnconditionalPasteIndentedBefore
nmap <Leader>pi <Plug>UnconditionalPasteIndentedAfter
nmap <Leader>P, <Plug>UnconditionalPasteCommaBefore
nmap <Leader>p, <Plug>UnconditionalPasteCommaAfter
nmap <Leader>Pq <Plug>UnconditionalPasteQueriedBefore
nmap <Leader>pq <Plug>UnconditionalPasteQueriedAfter
nmap <Leader>PQ <Plug>UnconditionalPasteRecallQueriedBefore
nmap <Leader>pQ <Plug>UnconditionalPasteRecallQueriedAfter
nmap <Leader>Pu <Plug>UnconditionalPasteUnjoinBefore
nmap <Leader>pu <Plug>UnconditionalPasteUnjoinAfter
nmap <Leader>PU <Plug>UnconditionalPasteRecallUnjoinBefore
nmap <Leader>pU <Plug>UnconditionalPasteRecallUnjoinAfter
nmap <Leader>Pp <Plug>UnconditionalPastePlusBefore
nmap <Leader>pp <Plug>UnconditionalPastePlusAfter
nmap <Leader>PP <Plug>UnconditionalPasteGPlusBefore
nmap <Leader>pP <Plug>UnconditionalPasteGPlusAfter
imap <C-G>c <Plug>UnconditionalPasteChar
imap <C-G>, <Plug>UnconditionalPasteComma
imap <C-G>q <Plug>UnconditionalPasteQueried
imap <C-G>Q <Plug>UnconditionalPasteRecallQueried
imap <C-G>u <Plug>UnconditionalPasteUnjoin
imap <C-G>U <Plug>UnconditionalPasteRecallUnjoin |
| |
script versions (upload new version)
Click on the package to download.
| UnconditionalPaste-2.21.vmb.gz |
2.21 |
2013-04-23 |
7.0 |
Ingo Karkat |
- FIX: In gpp and gPp, keep leading zeros when incrementing the number.
- FIX: In gpp and gPp, do not interpret leading zeros as octal numbers when incrementing. |
| UnconditionalPaste-2.20.vmb.gz |
2.20 |
2013-03-18 |
7.0 |
Ingo Karkat |
- ENH: gpp also handles multi-line pastes. A number (after the corresponding column) is incremented in every line. If there are no increments this way, fall back to replacement of the first occurrence.
- ENH: Add gPp / gPP mappings to paste with all numbers incremented / decremented.
- ENH: Add g]p / g]P mappings to paste linewise with adjusted indent. Thanks to Gary Fixler for the suggestion. |
| UnconditionalPaste-2.10.vmb.gz |
2.10 |
2012-12-22 |
7.0 |
Ingo Karkat |
- ENH: Add gpp / gpP mappings to paste with one number (which depending on the current cursor position) incremented / decremented.
- FIX: For characterwise pastes with a [count], the multiplied pastes must be joined with the desired separator, not just plainly concatenated.
- FIX: Don't lose the original [count] given when repeating the mapping.
- FIX: Do not re-query on repeat of the mapping. |
| UnconditionalPaste-2.00.vmb.gz |
2.00 |
2012-12-11 |
7.0 |
Ingo Karkat |
- ENH: Add g,p / gqp / gQp mappings to paste lines flattened with comma, queried, or recalled last used delimiter.
- ENH: Add gup / gUp mappings to paste unjoined register with queried or recalled last used delimiter pattern.
- ENH: Add CTRL-R CTRL-C mapping to insert register contents characterwise (flattened) from insert mode, and similar insert mode mappings for the other new mappings.
- CHG: Flatten all whitespace and newlines before, after, and around lines when pasting characterwise or joined. |
| UnconditionalPaste-1.22.vmb.gz |
1.22 |
2012-12-04 |
7.0 |
Ingo Karkat |
- BUG: When repeat.vim is not installed, the mappings do nothing. Need to :execute the :silent! call of repeat.vim to avoid that the remainder of the command line is aborted together with the call.
- Using separate autoload script to help speed up Vim startup. |
| UnconditionalPaste.vba.gz |
1.21 |
2012-06-17 |
7.0 |
Ingo Karkat |
- ENH: When pasting a blockwise register as lines, strip all trailing whitespace. This is useful when cutting a block of text from a column-like text and pasting as new lines.
- ENH: When pasting a blockwise register as characters, flatten and shrink all trailing whitespace to a single space. |
| UnconditionalPaste.vba.gz |
1.20 |
2011-12-02 |
7.0 |
Ingo Karkat |
BUG: Repeat always used the unnamed register. Add register registration to enhanced repeat.vim plugin. This also handles repetition when used together with the expression register "=. Requires a so far inofficial update to repeat.vim version 1.0 (that hopefully makes it into upstream), which is available at https://github.com/inkarkat/vim-repeat/zipball/1.0ENH1 |
| UnconditionalPaste.vba.gz |
1.11 |
2011-06-07 |
7.0 |
Ingo Karkat |
ENH: Support repetition of mappings through repeat.vim. |
| UnconditionalPaste.vba.gz |
1.10 |
2011-01-13 |
7.0 |
Ingo Karkat |
Incorporated suggestions by Peter Rincker (thanks for the patch!):
- Made mappings configurable via the customary <Plug> mappings.
- Added mappings gbp, gbP for blockwise pasting.
- Now requires Vim version 7.0 or higher. |
| UnconditionalPaste.vba.gz |
1.00 |
2010-12-10 |
6.0 |
Ingo Karkat |
Initial upload |
ip used for rating: 23.20.196.179
|