The Esc key is heavily used in vim to get back to normal mode from insert, command or visual mode. When you press the Esc key inside vim on the cloud shell the cursor changes shape and vim blocks. If you continually press on Esc key or if you click on the cursor itself then vim works again.
I am in the habit of using the Esc key for changing back to normal in vim and so this makes using vim on the cloud shell very painful.
I do not have to use the Esc key (I can use Ctrl+c or Ctrl+[ and that works except that the banner prompt still claims vim is in INSERT mode when it has switched to NORMAL mode) but it is hard to change my habits.
vim cursor in INSERT mode just before pressing Esc key
vim cursor becomes hollowed out just after Esc is pressed but still in INSERT mode
NORMAL mode can be obtained by pressing Esc two or three more times and waiting
I have investigated remapping the Esc key inside vim but this messes up vim and I get strange behaviour (see warning not to change Esc key mapping in How to disable Esc and cursor keys in vim).
The backspace key does not work in vim either but that can be fixed inside .vimrc with:
inoremap <bs> <left><del>
If there is no fix for the Esc key mapping then I will have to force myself to learn not to use the Esc key.
The best alternative to the Esc key on the cloud shell seems to be Alt+Space - as that invokes a return to NORMAL mode and switches off the --INSERT mode message on the bottom too.
You'll have to hit escape twice (quickly) to enter ESC mode.
Is there a method in OS X such that Vim will enter insert mode automatically and copy text, instead of having to enter insert mode first and press command + V?
Or more generically, how to map command keys in Vim in OS X? I use command line Vim, not MacVim.
Add this to your vimrc:
nnoremap <c-v> p:startinsert!<cr>
This will insert your clipboard content and place the cursor after the inserted text and change to insert mode.
But why you want insert mode altogether? Just press p in normal mode!
I have edited my .vimrc file and mapped some commands. They are only working in normal mode. Is there any way to map commands in insert mode? (e.g. commands involved with special keys such as Ctrl) For example, can I copy in insert mode using Ctrl+c?
The first letter in the :map commands determines which modes (:h map-modes) they apply to. So :nnoremap is for normal mode, and :inoremap for insert mode.
You usually cant' just use the same right-hand side; you need to consider that you're in a different mode. To invoke a (normal mode) command from insert mode:
prepend <Esc> if you want to stay in normal mode after the mapping
prepend <C-o> if you want to continue in insert mode after the mapping; this command switches to normal mode for just one command
For example, to map :w to <C-s>, you'd use this: :nnoremap <C-s> :w<CR>. The corresponding insert mode mapping (staying there) is:
:inoremap <C-s> <C-o>:w<CR
See :help imap. You can map keys, including keys with control, to various things within insert mode. For instance, if you wanted to copy the current word in insert mode with Ctrl+c you could use
inoremap <C-c> <esc>yiwea
By default when I press insert key, vim switches to the INSERT mode.
If I press insert key again, vim switches to the REPLACE mode.
I want to toggle INSERT/NAVIGATION modes by pressing insert key.
I.e.: press insert key -> get INSERT mode. Press insert key again -> get back NAVIGATION mode.
How do I get that?
To change the meaning of the <Insert> key (that's how it's spelled in Vim's key notation), you define an insert mode mapping. Since you want to leave insert mode, you map the key to <Esc>, which takes you out of insert mode.
:inoremap <Insert> <Esc>
imap <insert> <esc>
Is it possible to paste in insert mode in Vim?
While in insert mode hit CTRL-R {register}
Examples:
CTRL-R * will insert in the contents of the clipboard
CTRL-R " (the unnamed register) inserts the last delete or yank.
To find this in vim's help type :h i_ctrl-r
If you don't want Vim to mangle formatting in incoming pasted text, you might also want to consider using: :set paste. This will prevent Vim from re-tabbing your code. When done pasting, :set nopaste will return to the normal behavior.
It's also possible to toggle the mode with a single key, by adding something like set pastetoggle=<F2> to your .vimrc. More details on toggling auto-indent are here.
No not directly. What you can do though is quickly exit insert mode for a single normal mode operation with Ctrl-O and then paste from there which will end by putting you back in insert mode.
Key Combo: Ctrl-O p
EDIT: Interesting. It does appear that there is a way as several other people have listed.
While in insert mode, you can use Ctrl-R {register}, where register can be:
+ for the clipboard,
* for the X clipboard (last selected text in X),
" for the unnamed register (last delete or yank in Vim),
or a number of others (see :h registers).
Ctrl-R {register} inserts the text as if it were typed.
Ctrl-R Ctrl-O {register} inserts the text with the original indentation.
Ctrl-R Ctrl-P {register} inserts the text and auto-indents it.
Ctrl-O can be used to run any normal mode command before returning to insert mode, so Ctrl-O "+p can also be used, for example.
For more information, view the documentation with :h i_ctrl-r
You can use this to paste from clipboard with Ctrlv:
set pastetoggle=<F10>
inoremap <C-v> <F10><C-r>+<F10>
And this for yanking visual selection into clipboard with Ctrlc:
vnoremap <C-c> "+y
If you also want to use clipboard by default for classic vim yanking/pasting (y/p) in normal mode, here is a config option that does it:
set clipboard=unnamedplus
With this configs you can e.g. yank first in normal mode and then paste with Ctrlv in insert mode. Also, you can paste text from different vim instances and different applications.
Another option is:
set clipboard=unnamed
Then you will be able to just select something by mouse dragging in your X environment and paste it into vim afterwards. But (for some reason) you won't be able to yank something (y) in Vim and shiftinsert it somewhere else afterwards, which is probably quite limiting.
Vim docs about this: http://vim.wikia.com/wiki/Accessing_the_system_clipboard
For pasting from custom registers you can follow the other answers :). This answer is mainly about integrating Vim with your system clipboard.
Note that for set clipboard=unnamedplus and set clipboard=unnamed to work, you need to use gvim or vimx (vim-X11): Those are compiled with +xterm_clipboard. You can optionally put this into your .bashrc to alias vim with vimx:
if [ -e /usr/bin/vimx ]; then
alias vim='/usr/bin/vimx'; # vim with +xterm_clipboard
fi
You can find out whether or not your vim has the +xterm_clipboard in the information provided by vim --version.
If you set Vim to use the system clipboard (:set clipboard=unnamed), then any text you copy in Vim can be pasted using Shift + Insert. Shift + Insert is simply an OS-wide paste key-combination (Ctrl + Insert is the corresponding 'copy').
You can also use the mouse middle button to paste in insert mode (Linux only).
You can enter -- INSERT (past) -- mode via:
Keyboard combo: y p
or
:set paste and entering insert mode (:set nopaste to disable)
once in -- INSERT (past) -- mode simply use your systems paste function (e.g. CtrlShiftv on Linux, Cmdv on Mac OS).
This strategy is very usefully when using vim over ssh.
Yes. In Windows Ctrl+V and in Linux pressing both mouse buttons nearly simultaneously.
In Windows I think this line in my _vimrc probably does it:
source $VIMRUNTIME/mswin.vim
In Linux I don't remember how I did it. It looks like I probably deleted some line from the default .vimrc file.
Just add map:
" ~/.vimrc
inoremap <c-p> <c-r>*
restart vim and when press Crtl+p in insert mode,
copied text will be pasted
Paste in Insert Mode
A custom map seems appropriate in this case. This is what I use to paste yanked items in insert mode:
inoremap <Leader>p <ESC>pa
My Leader key here is \; this means hitting \p in insert mode would paste the previously yanked items/lines.
Add this to vimrc or init file:
imap <silent> PP <ESC>pa
..to paste in insert mode with "PP" and stay in insert mode..