В VIM, как сопоставить "сохранить" с Ctrl-S - PullRequest
56 голосов
/ 10 августа 2010

В vim, как я могу сопоставить "save" (:w) с ctrl - s .

Я пытаюсь "отобразить" команду,но xterm зависает, когда я нажимаю ctrl - s .

Если я дам ctrl - v , ctrl - s все еще я вижу только ^, а не^S.

Ответы [ 5 ]

98 голосов
/ 10 августа 2010

Ctrl + S - это общая команда для терминалов, чтобы остановить обновление, это был способ замедлить вывод, чтобы вы могли читать его на терминалах, у которых не было прокрутки буфер. Сначала выясните, можете ли вы настроить свой xterm для передачи Ctrl + S через приложение. Тогда эти команды карты будут работать:

noremap <silent> <C-S>          :update<CR>
vnoremap <silent> <C-S>         <C-C>:update<CR>
inoremap <silent> <C-S>         <C-O>:update<CR>

Кстати: если Ctrl + S замораживает ваш терминал, введите Ctrl + Q , чтобы возобновить его работу.

63 голосов
/ 02 июля 2012

В Linux с VI вы хотите нажать Ctrl - S и сохранить его. Это сработало для меня, поместил следующие три строки в ваш файл .vimrc . Этот файл должен находиться в вашем домашнем каталоге: /home/el/.vimrc Если этот файл не существует, вы можете его создать.

:nmap <c-s> :w<CR>
:imap <c-s> <Esc>:w<CR>a

Первая строка гласит: нажатие Ctrl - S внутри документа вызовет комбинацию :w <enter> клавиатуры.

Вторая строка гласит: при нажатии Ctrl - S внутри документа в режиме «вставка» вы вернетесь в обычный режим, выполните :w <enter, затем нажмите a чтобы вернуться в режим вставки. Ваш курсор может двигаться во время этого события.

Вы можете заметить, что нажатие Ctrl - S выполняет 'XOFF', который останавливает получение команд (если вы используете ssh).

Чтобы исправить это, поместите эти две команды в ваш ~ / .bash_profile

bind -r '\C-s'
stty -ixon

Отключает привязку Ctrl - S и избавляется от любых экранных сообщений XOFF при нажатии Ctrl - S . Обратите внимание, что после внесения изменений в ваш файл .bash_profile его необходимо повторно запустить с помощью команды «source .bash_profile» или logout / login.

Подробнее: http://vim.wikia.com/wiki/Map_Ctrl-S_to_save_current_or_new_files

8 голосов
/ 25 февраля 2014

Mac OSX Terminal + zsh?

В вашем .zprofile

alias vim="stty stop '' -ixoff; vim"

Почему ?, Что происходит? См. Здесь , но в основном для большинства терминалов ctrl + s для чего-то уже используется, поэтому этот псевдоним vim, поэтому перед запуском vim мы отключаем это отображение.

В вашем .vimrc

nmap <c-s> :w<cr>
imap <c-s> <esc>:w<cr>a

Почему? Что происходит? Это должно быть довольно очевидно, мы просто отображаем ctrl + s на различные нажатия клавиш в зависимости от того, находимся ли мы в нормальном режиме или режим вставки.

7 голосов
/ 11 августа 2015

У меня есть сообщение для этого.

ВИМ

# ~/.vimrc
nnoremap <c-s> :w<CR> # normal mode: save
inoremap <c-s> <Esc>:w<CR>l # insert mode: escape to normal and save
vnoremap <c-s> <Esc>:w<CR> # visual mode: escape to normal and save

zsh (если вы используете)

# ~/.zshrc
# enable control-s and control-q
stty start undef
stty stop undef
setopt noflowcontrol

bash (если вы используете)

# ~/.bash_profile or ~/.bashrc
# enable control-s and control-q
stty -ixon
0 голосов
/ 09 февраля 2018

Каждый раз, когда я пробую вышеупомянутые настройки, я не могу сохранить из режима INSERT через CTRL + S, когда я нажимаю CTRL + S в VIM, работающем в GNOME Terminal версии 3.26.2, я получаю

^S

У кого-нибудь есть решение для этого? Спасибо.

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