Is there a shortcut in vim for :20
followed by i
, i.e. one command for inserting at a line number?
-
This is about how to do programming with a particular tool; it is within scope for SO.– Jonathan LefflerJun 27, 2011 at 4:37
-
why would you hard code a particular line number in a command?– user76528Jun 27, 2011 at 7:22
4 Answers
You can use nmap
vim command like this:
:nmap ~! 20Gi
And then every time you will press keystrokes ~!
(or you can choose any other key combination) it will move cursor on line # 20 in insert mode.
-
Note that if option
startofline
is unset,G
preserves the cursor column, therefore,i
could start Insert mode not necessarily on the first non-blank character of the line. In this particular case it's better to useI
orgI
command (depending on whether you want to insert a line number before of after possible leading whitespace).– ibJun 27, 2011 at 6:10
You can type :20i<enter>Text you want to insert including newlines...<esc>
-
how is this different than what she is trying not to do? I thought he was looking for an easier way of inserting text at line N without
:Ni
, in this case line 20. Did I misinterpret the question?– matchewJun 27, 2011 at 4:33 -
This is the same number of characters typed as if you invert the order of the 'enter' and 'i' as in the question. Jun 27, 2011 at 4:37
another way to do what you ask is 20Gi
in normal mode. it may not be faster, but it may be easier to remember. if you want to do it without the shift try 20ggi
thinking about it more, and this wont work in obvious cases, but I like to do the following
:set mouse=a
:nmap <2-LeftMouse> i
which, in normal mode (note nmap
), will bring me to that line and when I double click it will change to insert on the specified line. The usefulness could be trivial, but if you are used to using the mouse this map help.
viemu.comhas a half decent cheatsheet, if you like
-
This is actually one character shorter than the original; well done. Jun 27, 2011 at 4:38
Normal mode i
is available in command mode as startinsert
, but that doesn’t accept a line number. So you need two commands, and a bar to separate them, which gives you :20 | startinsert
.
-
-
No, it’s just the only approach that works in vimscript, if that’s what the OP is trying to do. Jun 27, 2011 at 6:17
-
In that case, you need to expand your answer to explain what you mean, because it is not entirely clear to me what you do mean; I've not encountered vimscript before, but I only use vim as a souped-up vi, not making full use of the incredible complexities it has added. Jun 27, 2011 at 6:19