La touche de suppression ne fonctionne pas dans vim sur iTerm2

16

Tout d'abord, j'ai tapé quelque chose en mode insertion, comme

Hello

À ce stade, si je ne quitte pas le mode d'insertion, deletefonctionne et peut supprimer le mot entier si je veux.

Si je quitte le mode insertion et que j'ouvre à nouveau le mode insertion, cela Hellone peut pas être supprimé par delete. Mais le contenu nouvellement tapé peut être supprimé.

J'ai renommé mon .vimrc, le problème persiste.

Et j'ai fait quelques tests sur un serveur distant via iterm, je n'ai pas rencontré le même problème.

Quelle pourrait être la cause de ce problème? Comment le réparer?

Zen
la source
Avec «supprimer», vous voulez dire retour arrière? Supprimer des mots entiers en mode insertion peut être fait avec Ctrl-W, essayez cela. Si cela ne fait rien, il y a un problème avec votre vim. J'utilise iTerm 2 et je n'ai jamais eu de tels problèmes.
oarfish
Oui, je peux utiliser dwou dw+ shiften mode normal pour supprimer des mots. Mais backspaceet ctrl+ les wdeux ne fonctionnent pas dans la deuxième situation que j'ai mentionnée ci-dessus.
Zen
Mais vous pouvez utiliser le retour arrière sur la ligne de commande normale en dehors de vim? Très étrange.
oarfish
@oarfish, oui, je peux, et dans le serveur distant vim, je n'ai pas un tel problème, tout se passe tout d'un coup. Je ne peux pas avoir la moindre idée pour l'instant.
Zen
Quelle version de vim possédez-vous? J'ai vim 7.4.481 et je ne peux pas reproduire le problème.
jan.h

Réponses:

16

C'est une fonctionnalité de vim, bien que l'IIRC ne soit pas activé par défaut.

backspaceest un paramètre dans vim, et vous pouvez définir trois paramètres différents: indent, eoletstart

Si vous courez :help backspace, il vous dira:

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.

Celui qui n'est pas réglé pour vous l'est start.

Si vous ajoutez set backspace=indent,eol,startà votre .vimrc, vous pourrez revenir en arrière sur tout en mode insertion.

Jay Thompson
la source
"fonctionnalité" ... Pour une raison quelconque, je le vois activé par défaut sur un nouveau macOS 10.13 avec une dernière version de vim. Cette solution résout toujours le problème.
Taylor Edmiston
9

J'avais aussi cela, les valeurs par défaut du traitement de texte naturel étaient fausses pour moi.

  • MacBook Pro (15 pouces, 2018)
  • 10.14.3 (Mojave)
  • Iterm2 3.2.7

Aller à Preferences > Profiles > Keyset charger le préréglage par défaut Natural Text Editinget supprimer toutes les entrées qui sont sur deleteet le deletecomportement. Après cela, cela fonctionne comme prévu.

Salyangoz
la source
1
Idem, sauf que je viens de supprimer les entrées sur "Del->", mais que je n'ai pas ajouté de liaison "Sends ^ H". Ensuite, cela a fonctionné comme prévu.
DagW
@DagW a confirmé que la liaison ^ H n'est pas nécessaire.
Salyangoz
2
J'ai dû creuser trop profondément dans les mauvais messages juste pour trouver cela comme la bonne réponse, merci beaucoup!
RecuencoJones
1
J'ai eu le problème sur mon Tmux et Iterm2 pendant longtemps, je n'ai jamais trouvé de solution tant que je n'ai pas trouvé votre message ici.
1234
1
Oui! il s'agit de la configuration d'iterm, pas de vim lui-même.
Rodrirokr