(Remove html character entities) |
(Change <tt> to <code>, perhaps also minor tweak.) |
||
Line 4: | Line 4: | ||
|previous=1168 |
|previous=1168 |
||
|next=1172 |
|next=1172 |
||
− | |created= |
+ | |created=2006 |
|complexity=basic |
|complexity=basic |
||
|author=Alan Brogan |
|author=Alan Brogan |
||
Line 31: | Line 31: | ||
</pre> |
</pre> |
||
− | Then pressing < |
+ | Then pressing <code>\v</code> gives |
<pre> |
<pre> |
||
formula = 3 * y + 4 * z |
formula = 3 * y + 4 * z |
||
Line 46: | Line 46: | ||
==Comments== |
==Comments== |
||
− | Note that the < |
+ | Note that the <code>"</code> register has your last edit and in insert mode, <C-R> will paste the contents of the register indicated by the next keystroke, so your example re-interpreted with standard commands is: |
<pre> |
<pre> |
Latest revision as of 06:11, 13 July 2012
created 2006 · complexity basic · author Alan Brogan · version 5.7
The following is from my vimrc, and works as a simple "introduce variable". It is sufficient for Python, but for typed languages (e.g. C++, Java) you will need to add a type (int, String, etc) to the start of the new line.
" map \v to put x = y on the line above cursor, where " x is the last text inserted " y is the last text deleted map <Leader>v 0wh:put .<CR>a = <Esc>pa<CR><Esc>
Example, given (Python) source code like:
if x > 3 * y + 4 * z:
You could position the cursor on the 3, then delete the RHS formula, and insert a name for it. You can do the "delete and insert" separately or in one go, e.g. go to the 3 and press "c/:<Cr>formula<Esc>". Or separately as "d/:<Cr>", followed by "iformula<Esc>". In either case you should now see:
if x > formula:
Then pressing \v
gives
formula = 3 * y + 4 * z if x > formula:
What it does:
- Go to start of line
- Go to before next word
- Add the last inserted text
- Add " = "
- Add the last deleted text
- Add a <Cr> to separate the new line from the old line (and vim preserves the indentation)
Comments[]
Note that the "
register has your last edit and in insert mode, <C-R> will paste the contents of the register indicated by the next keystroke, so your example re-interpreted with standard commands is:
(positioned on 3) ct:formula<C-o>Oformula = <C-r>"<Esc> ct: - change to the colon <C-o>O - break out of insert for one command and Open a line above (<Esc>O would work fine, but <Esc> is so far away...) <C-r>" - paste the contents of the unnamed register (:h "")
Your re-interpretation is one step short, in that you type in the new name twice. The original starts after the new name is typed in, so closer would be :
map <Leader>v O<C-r>. = <C-r>"<Esc>
See also VimTip589 which is also about refactoring.