Попытка удалить символы в режиме вставки с помощью backspaceклавиши иногда не работает. backspace Иногда я могу , но иногда ничего не происходит; курсор не идет влево, и кажется, что ничего не происходит.
Я заметил это с помощью gVim в Windows. Тем не backspaceменее, кажется, что работает как ожидалось при использовании Vim из терминала в большинстве систем Linux.
- Почему это происходит?
- Как заставить backspaceключ удалять символы как обычно?
- Это поведение задумано как функция? Другими словами: есть ли лучшие альтернативы backspaceдля удаления символов в режиме вставки?
insert-mode
GLS
источник
источник
X
(и удаляется с помощьюx
), но часто вы действительно хотели,db
например, удалить до начала слова илиdaw
удалить все слово и т. Д. Если у вас есть доступный возврат, вы рискуете использовать это неоптимальный ключ в большем количестве случаев, чем необходимо.J
который также заботится о пробелах. Короче говоря, backspace подходит для быстрого исправления опечаток во время записи, но кроме этого есть и лучшие альтернативы.:h vim-faq
и искать/backspace
. Трудно запомнить тег:h faq-12.26
.Ответы:
tl; dr: Добавьте это в ваш vimrc, чтобы заставить backspace работать, как в большинстве других программ:
Более длинный ответ
Хотя поведение по умолчанию может быть удивительным, возврат на «не работающий» может рассматриваться как функция ; это может предотвратить случайное удаление отступа и слишком большого объема текста, ограничивая его текущей строкой и / или началом вставки.
:help 'backspace'
говорит нам:Итак, что именно означают эти значения?
indent
Vim добавляет автоматический отступ для многих типов файлов; по умолчанию вы не можете вернуться на это; правила того, что считается «автоиндентированием», несколько неуловимы, например, если бы мы напечатали это (где █ - курсор):
Backspace не будет работать.
Но если бы мы затем добавить команды и
fi
, и вернуться, мы которые позволили удалить отступ:Это потому, что в первом примере Vim определил, что он должен добавить 1 уровень отступа, когда вы нажимаете Enter; но во втором примере Vim ничего не делал автоматически, это просто символы табуляции или несколько пробелов.
Также см
:help 'autoindent'
eol
Это должно быть наиболее очевидным, нажатие Backspace также удаляет маркеры EOL (
\n
или\r\n
); если отключено, Backspace ничего не сделает, если вы попытаетесь удалить маркер EOL.start
Это означает, что вы можете удалить только тот текст, который вы вставили с момента запуска режима вставки, и вы не можете удалить текст, который был вставлен ранее.
Итак, каковы настройки по умолчанию?
Причина этого в том, что многие дистрибутивы Linux поставляются с готовыми файлами vimrc, которые устанавливают некоторые общие параметры. Например, в моей системе Arch Linux у меня есть
/usr/share/vim/vimfiles/archlinux.vim
:Если вы устанавливаете Vim в Windows, по умолчанию используется vimrc и gvimrc, которые поставляются с Vim по умолчанию.
По умолчанию Vim является пустым значением для
backspace
. Arch Linux, Debian, CentOS или$other_distro
default могут отличаться.Нормальный режим
Этот вопрос касается Backspace в режиме вставки, но позвольте мне также добавить несколько кратких замечаний о Backspace в обычном режиме.
В обычном режиме Backspace действует как
h
, он просто идет влево.По умолчанию backspace будет переходить к предыдущей строке, если она находится в начале строки (как если бы она
eol
была внутриbackspace
); Вы можете контролировать это поведение с помощью'whichwrap'
опции черезb
флаг (по умолчанию включено).Вы также можете сделать символы возврата на обратную позицию, сопоставив их с
X
командой:источник
"_X
было бы "более естественным" поведением для<BS>
.На всякий случай, если кто-то испытывает необъяснимое
<BS>
поведение при использовании ConEmu в Windows, вам, возможно, придется переназначить<BS>
ключ на:Больше информации
источник
используется с v5.4 и ранее. работал для меня на Mac.
похоже на Mac у меня v3.2:
Все версии, предшествующие 3.2, используют GNU General Public License v3 (GPLv3), которую Apple не поддерживает. Обсуждение Reddit об этом здесь .
Вы можете перейти на новейшую версию Bash:
это позволяет использовать программируемое завершение, выделенное здесь .
источник
Если
set backspace=indent,eol,start
ваша последняя строкаvimrc
, ни одно из решений не будет работать.Добавьте еще одно правило после этого, например:
источник