tl; dr: Добавьте это в ваш vimrc, чтобы заставить backspace работать, как в большинстве других программ:
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.
Итак, что именно означают эти значения?
indent
Vim добавляет автоматический отступ для многих типов файлов; по умолчанию вы не
можете вернуться на это; правила того, что считается «автоиндентированием», несколько неуловимы, например, если бы мы напечатали это (где █ - курсор):
if :; then
█
Backspace не будет работать.
Но если бы мы затем добавить команды и fi
, и вернуться, мы которые
позволили удалить отступ:
if :; then
█:
fi
Это потому, что в первом примере Vim определил, что он должен добавить 1 уровень отступа, когда вы нажимаете Enter; но во втором примере Vim ничего не делал автоматически, это просто символы табуляции или несколько пробелов.
Также см :help 'autoindent'
eol
Это должно быть наиболее очевидным, нажатие Backspace также удаляет маркеры EOL ( \n
или \r\n
); если отключено, Backspace ничего не сделает, если вы попытаетесь удалить маркер EOL.
start
Это означает, что вы можете удалить только тот текст, который вы вставили с момента запуска режима вставки, и вы не можете удалить текст, который был вставлен ранее.
Итак, каковы настройки по умолчанию?
Я заметил это, используя GVIM в Windows. Backspace, кажется, работает как ожидалось при использовании 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
default могут отличаться.
Нормальный режим
Этот вопрос касается Backspace в режиме вставки, но позвольте мне также добавить несколько кратких замечаний о Backspace в обычном режиме.
В обычном режиме Backspace действует как h
, он просто идет влево.
По умолчанию backspace будет переходить к предыдущей строке, если она находится в начале строки (как если бы она eol
была внутри backspace
); Вы можете контролировать это поведение с помощью 'whichwrap'
опции через b
флаг (по умолчанию включено).
Вы также можете сделать символы возврата на обратную позицию, сопоставив их с X
командой:
nnoremap <BS> X
X
(и удаляется с помощьюx
), но часто вы действительно хотели,db
например, удалить до начала слова илиdaw
удалить все слово и т. Д. Если у вас есть доступный возврат, вы рискуете использовать это неоптимальный ключ в большем количестве случаев, чем необходимо.