tl; dr: Додайте це до свого vimrc, щоб зробити задній простір таким, як у більшості інших програм:
set backspace=indent,eol,start
Більш довга відповідь
Хоча поведінка за замовчуванням може бути дивовижною, резервна область "не працює" може вважатися функцією ; це може запобігти випадковому видаленню відступів та видаленню занадто багато тексту, обмеживши його поточним рядком та / або початком вставки.
:help 'backspace'
говорить нам:
Influences the working of `<BS>`, `<Del>`, `CTRL-W` and `CTRL-U` in Insert
mode. This is a list of items, separated by commas. Each item allows
a way to backspace over something:
value effect
indent allow backspacing over autoindent
eol allow backspacing over line breaks (join lines)
start allow backspacing over the start of insert; CTRL-W and CTRL-U
stop once at the start of insert.
То що саме ці значення означають?
відступ
Vim додає автоматичне відступ для багатьох файлів; за замовчуванням, ви НЕ
дозволили забій з цього приводу; правила того, що вважається «автоіндикацією», є дещо витонченими, наприклад, якщо ми введемо це (де █ - курсор):
if :; then
█
Резервне копіювання не буде працювати.
Але якби ми потім додати команди і fi
, і повернутися, ми які
дозволили видалити відступ:
if :; then
█:
fi
Це тому, що в першому прикладі Vim визначив, що він повинен додати 1 рівень відступу при натисканні клавіші Enter; але у другому прикладі Vim нічого не задав, це лише символи Tab або кілька пробілів.
Також див :help 'autoindent'
eol
Це має бути найбільш очевидним, натискання Backspace також видаляє маркери EOL ( \n
або \r\n
); якщо він відключений, Backspace нічого не зробить, якщо ви спробуєте видалити маркер EOL.
start
Це означає, що ви можете видалити лише текст, який ви вставили з моменту запуску режиму вставки, і ви не можете видалити будь-який текст, який раніше був вставлений.
То яка настройка за замовчуванням?
Я помітив це за допомогою GVIM у Windows. Здається, зворотний простір працює як очікувалося при використанні VIM з терміналу в більшості систем Linux.
Причиною цього є те, що багато дистрибутивів Linux мають попередньо зроблені файли vimrc, які встановлюють деякі загальні параметри. Наприклад, у моїй системі Arch Linux у мене є /usr/share/vim/vimfiles/archlinux.vim
:
set nocompatible
set backspace=indent,eol,start
" ... and a few more...
Якщо ви встановите Vim у Windows, за замовчуванням використовується використання vimrc та gvimrc за замовчуванням, з якими постачається Vim.
За замовчуванням Vim - це порожнє значення для backspace
. Arch Linux, Debian, CentOS або $other_distro
стандартні налаштування можуть бути різними.
Нормальний режим
Це питання стосується Backspace у режимі вставки, але дозвольте також додати кілька коротких зауважень щодо Backspace у звичайному режимі.
У звичайному режимі Backspace діє так h
, він просто йде ліворуч.
За замовчуванням, backspace перейде до попереднього рядка, якщо на початку рядка (як би він eol
був backspace
); ви можете керувати цією поведінкою за допомогою 'whichwrap'
параметра через b
прапор (увімкнено за замовчуванням).
Ви також можете зробити символи видалення зворотної області, зіставивши їх з X
командою:
nnoremap <BS> X
X
(і видалення за допомогоюx
), але часто те, що ви дійсно хотіли зробити, це,db
наприклад, видалити до початку слова, абоdaw
видалити ціле слово тощо. Якщо у вас є резервна область, ви ризикуєте використовувати це субоптимальний ключ у більшості випадків, ніж потрібно.