Essayer de supprimer des caractères en mode insertion avec la backspaceclé ne semble parfois pas fonctionner. Je peux backspace parfois , mais à d'autres moments cela ne fait rien; le curseur ne va pas à gauche, et absolument rien ne semble se passer.
J'ai remarqué cela en utilisant gVim dans Windows. Le backspacesemble fonctionner comme prévu lors de l' utilisation du terminal Vim dans la plupart des systèmes Linux cependant.
- Pourquoi cela arrive-t-il?
- Comment faire en sorte que la backspaceclé supprime les caractères comme d'habitude?
- Ce comportement est-il conçu comme une fonctionnalité? En d'autres termes: existe-t-il de meilleures alternatives à la backspacesuppression de caractères en mode insertion?
insert-mode
glS
la source
la source
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.J
des espaces blancs. En bref, le retour arrière convient aux corrections rapides de fautes de frappe en écriture, mais à part cela, il existe de meilleures alternatives.:h vim-faq
et effectuer une recherche/backspace
. Le tag difficile à mémoriser est:h faq-12.26
.Réponses:
tl; dr: Ajoutez ceci à votre vimrc pour que le retour arrière fonctionne comme dans la plupart des autres programmes:
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: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):
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: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?
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
: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 dedansbackspace
); 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:la source
"_X
serait un comportement "plus naturel" pour<BS>
.Au cas où quelqu'un aurait eu un
<BS>
comportement non explicable lors de l'utilisation de ConEmu sous Windows, vous devrez peut-être remapper la<BS>
clé sur:Plus d'information
la source
est utilisé avec les versions 5.4 et antérieures. travaillé pour moi sur mac.
on dirait que sur mac j'ai v3.2:
Toutes les versions antérieures à 3.2 utilisent la licence publique générale GNU v3 (GPLv3), qu'Apple n'est pas en faveur de la prise en charge. Une discussion sur reddit à ce sujet est ici .
Vous pouvez passer à la dernière version de Bash avec:
cela permet de tirer parti de l'achèvement programmable mis en évidence ici .
la source
Si
set backspace=indent,eol,start
est la dernière ligne de votrevimrc
, aucune des solutions ne fonctionnera.Ajoutez une autre règle après ceci, par exemple:
la source