У vim, як відобразити “зберегти” на ctrl-s


78

У vim, як я можу зіставити "save" ( :w) на ctrl- s.

Я намагаюся "зіставити" команду, але xterm зависає, коли я натискаю ctrl- s.

Якщо я даю ctrl- v, ctrl- sвсе одно я бачу лише а ^, ні ^S.


8
що не так із звичним для Віма: w? Я здогадуюсь, що ctrl-s заморожує ваш xterm, оскільки заморожує весь вихід у терміналах. ('stty -ixon' може допомогти)
Yoni H

17
Натискання (Escape shift двокрапка w Enter) займає приблизно в 3 рази більше часу, ніж натискання Ctrl-s. Хоча я виявив, що натискання клавіш ctrl-s викликає зап'ястний тунель більше, ніж введення двокрапки Esc, він поширює штам, щоб мати два варіанти збереження.
Ерік Лещинський

Відповіді:


143

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щоб знову запустити.


7
працює з OSX, iTerm2, ZSH, oh-my-zsh, коли ви включаєте "stty -ixon" у файл .zshrc
Річард

4
"stty -ixon" у вашому .bashrc також потрібен для Terminal.app з bash.
Джонатан Поттер

@ ned-batchelder Чи добре, якщо замість цього ви зіставите Ctrl-W? Чи буде проблема з командами vim або терміналом за замовчуванням?
Ті Г.

@ThiG. <C-W>як правило , використовується для поділу і віконних команд вікна
Юве

5
До речі, саме через це пошукові системи приземлили мене тут, дякую.
Timothy LJ Stewart

70

У 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у документі, перебуваючи в режимі "вставки", вийде нормальний режим, виконайте a :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' або вийти / увійти.

Докладніше: http://vim.wikia.com/wiki/Map_Ctrl-S_to_save_current_or_new_files


3
Для термінала gnome було достатньо додати 'stty -ixon' до мого .bashrc.
DavidG

1
: imap <cs> <Esc>: w <CR> a <----- Це не спрацює, як очікувалося, на початку рядка (замість вставки додається 'a', що я б очікуйте). Чи є спосіб змусити це робити "a" або "i" відповідно до того, де знаходиться курсор?
alexandernst

Не могли б ви пояснити, чому ви використовуєте 2 imapкоманди? Здається, вам потрібно лише imap <c-s> <Esc>:w<CR>a. Дякую.
gwintrob

Я думав, що другий командний рядок imap має значення, але при подальшому огляді він нічого не робить. Відмінний улов, я прибрав кульгаву лінію.
Ерік Лещинський

1
Чи є причина, чому ви використовуєте замість i?
DemiImp

12

vim

# ~/.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

Чи не повинно бути vnoremap <c-s> <Esc>:w<CR> # visual mode: escape to normal and save?
BlackBeltScripting

10

Термінал Mac OSX + 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 різним натисканням клавіш залежно від того, перебуваємо ми в звичайному режимі чи режимі вставки.


ти, сер, врятував мій день
xechelonx
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.