2010-11-11 4 views
16

Lorsque j'utilise VIM dans le terminal de ma machine locale (Mac OS X Snow Leopard), la touche de suppression est vraiment en retour arrière (c'est-à-dire, retour arrière destructeur).Comment puis-je corriger ma clé de suppression dans VIM sur ssh? (Mac OS X)

Lorsque je SSH dans un serveur particulier, pour une raison quelconque, c'est une suppression régulière (c'est-à-dire, supprimer le caractère sous le curseur).

Comment puis-je le modifier pour être cohérent? J'ai essayé une douzaine de solutions, mais rien ne semble fonctionner.

Cocher la case "Supprimer envoie Ctrl-H" dans Terminal Preferences-> Advanced ne fonctionne pas - il s'agit d'un retour arrière non destructif.

J'ai essayé une centaine de mappages de touches différents dans VIM, en vain. Fait intéressant, la touche fonctionne comme prévu lorsque je tape des commandes dans VIM (par exemple, : <something>) - c'est seulement foutu quand je suis en train d'éditer le texte. Des idées?

Répondre

1

Essayez d'ajouter

set <Del>=<C-v><Del>

à la vimrc sur la machine cible. Ici vous devez taper < C-v ><Del> en étant connecté sur la machine cible. Si cela ne fonctionne pas, vérifiez verbose imap <Del>: cela devrait vous indiquer si certains plugins ont remappé <Del> en mode insertion.

+0

Salut ZyX, essayé cela mais pas aller. Quand je tape je me retrouve avec une commande ressemblant à ": set = ^?". Je l'ai entré à la fois sur la ligne de commande dans VIM et dans mon .vimrc; a également essayé de régler de la même manière, mais rien ne fait aucune différence. verbose imap et verbose imap tous les deux disent "pas de mappage trouvé." Très frustrant puisque, comme je l'ai mentionné, la clé fonctionne comme il se doit (en tant qu'espace retour destructeur) quand je tape réellement la commande VIIM à l'invite:; va mal dans le document réel. – Aeonaut

+0

@Aeonaut Très étrange que je peux faire '' travail comme '' avec 'set = = '. Sur tous mes terminaux '' envoie "^ [[3 ~", mais j'ai vu des terminaux où il envoie '^?'. Qu'entendez-vous par «backspace destructif»? Peut-être que vous devriez essayer 'inoremap cl' (j'utilise cette séquence pour supprimer le caractère précédent dans le plugin de translittération, cela fonctionne indépendamment des options' backspace' et 'delcombine'). Essayez aussi la commande ': fixdel'. – ZyX

7

Couple d'idées à essayer:

  • Dans votre fichier .vimrc sur le serveur distant, ajoutez cette ligne:

    set term=linux 
    
  • Dans votre fichier .bash_profile (ou tout ce qui correspond à votre coquille choix) sur le serveur distant:

    stty erase ^H 
    

    Remarque: pour faire ce travail correctement, vous devez taper ctrl - v, puis ctrl - h pour saisir le caractère ^H.

    De même, assurez-vous que "Delete sends Ctrl-H" est coché dans vos préférences de terminal.

3

Essayez ceci: http://www.alecjacobson.com/weblog/?p=295

Je résolu le problème en changeant mes paramètres Terminal.app. Sous Terminal> Préférences, choisissez Avancé. Cochez la case "Supprimer envoie Ctrl-H". Maintenant, vi et vim devraient mieux comprendre la touche d'effacement.

Remarque: Le mappage de la clé "delete" dans mon fichier vimrc m'a semblé être probablement la bonne façon de le faire, mais cela pose beaucoup de problèmes. Y a-t-il une raison de ne pas le faire de cette façon?

13

Cela a fonctionné pour moi:

:set backspace=indent,eol,start 

Je ne sais pas exactement ce qu'il fait, mais il est répertorié comme une solution possible here et here. J'ai trouvé cette ligne dans un fichier vimrc distribué avec Ubuntu où le comportement de la touche mac "delete" (autrement dit la touche "backspace") fonctionne comme prévu sans aucune autre configuration. Le comportement que j'éprouvais était un son de cloche (pas de caractères supprimés) lorsque j'appuyais sur la touche mac "delete" (autrement dit la touche "retour arrière") en mode insertion. J'utilise une version compilée de vim 7.3 sur "amazon linux" sur ssh depuis un mac. En appuyant sur <ctrl-v><delete> en mode insertion a entraîné^?.