TAB не работает при изменении CTRL + S для сохранения файла в vim

Я попытался сохранить файл в vim, используя CTRL+S. Я наткнулся на эту ссылку http://vim.wikia.com/wiki/Map_Ctrl-S_to_save_current_or_new_files и в соответствии с этим добавил эти куски кода в .basrc и vimrc соответственно:

vim()
{
local STTYOPTS="$(stty --save)"
stty stop '' -ixoff
command vim "$@"
stty "$STTYOPTS"
}

и

nmap <C-s> :wq!<cr>

Хорошо, теперь CTRL+S сохраняет файл. Но TAB теперь не работает в режиме вставки. Когда я нажимаю TAB, курсор возвращается к первому столбцу текущей строки!! Любые решения?


person Soumen    schedule 30.12.2012    source источник
comment
Не делайте nmap, используйте nnoremap. Пояснение.   -  person ZyX    schedule 30.12.2012
comment
И научитесь использовать правильные ярлыки и сопоставления. :w.   -  person romainl    schedule 30.12.2012


Ответы (1)


:nmap определяет сопоставление только в обычном режиме. Для режима вставки используйте :imap (как правило, предпочтительнее :inoremap, если вам действительно не нужно переназначение), и сначала покиньте режим вставки, добавив перед ним <C-o> (для одной команды) или <Esc> (здесь более уместно, так как вы хотите оставить буфер во всяком случае с :quit).

:inoremap <C-s> <C-o>:wq!<cr>

Кстати, мне интересно, что вы также хотите выйти из буфера. Для меня сопоставление полезно, потому что я могу быстро ввести его в середине редактирования, чтобы часто сохранять изменения.

" Use CTRL-S for saving, also in Insert mode
:nnoremap <C-S>     :<C-U>update<CR>
:vnoremap <C-S>     :<C-U>update<CR>gv
:cnoremap <C-S>     <C-C>:update<CR>
:inoremap <C-S>     <C-O>:update<CR>
person Ingo Karkat    schedule 30.12.2012
comment
мне добавить ваш второй блок кода в мой файл _gvimrc или мне просто нужно запустить каждую команду, а затем установить vim с этими новыми сопоставлениями? - person whytheq; 06.05.2013
comment
@whytheq Вы помещаете их в свой файл _vimrc, чтобы сделать их постоянными. _gvimrc следует зарезервировать только для настроек графического интерфейса; здесь это не имеет значения, но вы не можете использовать его, например. для настройки плагинов. - person Ingo Karkat; 06.05.2013
comment
Я использую gvim — если я добавлю второй блок скрипта в _vimrc, будет ли это означать, что CTRL+S сохранит буфер, когда я открою его в графическом интерфейсе? - person whytheq; 08.05.2013
comment
+1 хорошо - кажется, сработало - в вашем блоке 4 строки, поэтому я предполагаю, что это означает, что я могу использовать CTRL+S в 4 разных ситуациях vim? нормальный (n) режим, вставить (i) режим...? - person whytheq; 08.05.2013
comment
@whytheq Да, для каждого режима есть несколько отдельных сопоставлений. - person Ingo Karkat; 08.05.2013
comment
Я предполагаю, что первая строка - это (n) нормальный режим, а последняя строка - (i) nsert режим, но к каким режимам относятся две средние строки. - person whytheq; 08.05.2013
comment
@whytheq Комментарии здесь — неподходящее место для изучения Vim; см. справку, например. :help map-modes. - person Ingo Karkat; 08.05.2013