tl; dr: Ajoutez ceci à votre vimrc pour que le retour arrière fonctionne comme dans la plupart des autres programmes:
set backspace=indent,eol,start
Réponse plus longue
Bien que le comportement par défaut puisse être surprenant, le retour arrière "ne fonctionne pas" peut être considéré comme une fonctionnalité ; cela peut vous empêcher de supprimer accidentellement l'indentation et de supprimer trop de texte en le limitant à la ligne en cours et / ou au début de l'insertion.
:help 'backspace'
nous dit:
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.
Alors, que signifient ces valeurs exactement?
indent
Vim ajoute une indentation automatique à de nombreux types de fichiers; par défaut, vous n'êtes pas
autorisé à revenir en arrière sur cela; les règles de ce qui est considéré comme une 'autoindentation' sont quelque peu subtiles, par exemple, si nous tapions ceci (où █ est le curseur):
if :; then
█
L'espacement arrière ne fonctionnera pas.
Mais si nous ajoutons ensuite une commande et le fi
, et remontons, nous sommes
autorisés à supprimer l'indentation:
if :; then
█:
fi
En effet, dans le premier exemple, Vim a déterminé qu'il devrait ajouter 1 niveau d'indentation lorsque vous avez appuyé sur Entrée. mais dans le deuxième exemple, Vim n'a pas d'indentité automatique, il s'agit simplement de caractères de tabulation ou de quelques espaces.
Regarde aussi :help 'autoindent'
eol
Cela devrait être la solution la plus évidente. Appuyer sur la touche Retour arrière supprime également les marqueurs EOL ( \n
ou \r\n
). si elle est désactivée, Backspace ne fera rien si vous essayez de supprimer un marqueur EOL.
commencer
Cela signifie que vous pouvez seulement supprimer du texte que vous avez inséré depuis le mode d'insertion a commencé, et vous ne pouvez pas supprimer un texte qui a déjà été inséré.
Alors, quel est le réglage par défaut?
J'ai remarqué cela en utilisant GVIM dans Windows. Le retour arrière semble cependant fonctionner normalement lors de l’utilisation du VIM à partir du terminal dans la plupart des systèmes Linux.
La raison en est que de nombreuses distributions Linux proposent des fichiers vimrc préconfigurés qui définissent des options communes. Par exemple, sur mon système Arch Linux, j'ai /usr/share/vim/vimfiles/archlinux.vim
:
set nocompatible
set backspace=indent,eol,start
" ... and a few more...
Si vous installez Vim sous Windows, le comportement par défaut consiste à utiliser les commandes vimrc et gvimrc par défaut fournies avec Vim.
La valeur par défaut de Vim est une valeur vide pour backspace
. Arch Linux, Debian, CentOS ou les valeurs $other_distro
par défaut peuvent être différentes.
Mode normal
Cette question concerne le retour arrière en mode insertion, mais permettez-moi d'ajouter quelques brèves remarques à propos du retour arrière en mode normal.
En mode normal, le retour arrière agit comme si h
, il se dirigeait simplement vers la gauche.
Par défaut, le retour arrière va à la ligne précédente si au début d'une ligne (comme si elle eol
était dedans backspace
); vous pouvez contrôler ce comportement avec l' 'whichwrap'
option via l' b
indicateur (activé par défaut).
Vous pouvez également faire supprimer des caractères de retour arrière en le mappant à la X
commande:
nnoremap <BS> X
X
(et supprimer avecx
), mais souvent ce que vous vouliez faire étaitdb
par exemple de supprimer jusqu'au début du mot, oudaw
de supprimer le mot entier, etc. Si vous avez un retour arrière disponible, vous risquez de l'utiliser. clé sous-optimale dans plus de cas que nécessaire.