le retour arrière en mode insertion n'efface pas les caractères

10

Je suis nouveau sur vi , en fait j'ai commencé à apprendre vi à partir d'aujourd'hui et je suis bloqué sur le comportement de la touche de retour arrière . En fait, lorsque j'ai lancé vi sur mon Ubuntu 12.04 pour la première fois, ma touche de retour arrière fonctionnait normalement, mais après cela, elle a commencé à se comporter étrangement. Chaque fois que j'appuie sur le retour arrière en mode d'insertion, il se déplace simplement d'un endroit vers la gauche au lieu d'effacer le caractère. Comment récupérer la fonctionnalité de retour arrière par défaut? Veuillez noter que je ne souhaite pas installer vim ou définir nocompatibilty.

Saprativa Bhattacharjee
la source
5
C'est le comportement vi traditionnel. Si vous avez la possibilité de définir la non-compatibilité, vous l'utilisez déjà vim.
Stéphane Chazelas
Je ne sais pas que vi est installé sur Ubuntu. vi dans le monde Linux selon mon expérience n'est qu'un lien symbolique vers vim. Si vous voulez apprendre le vrai vi, installez nvi ou hairloom project vi.
Predrag Punosevac

Réponses:

6

Parfois, la vicommande est un alias pour vimet lorsqu'elle est appelée as viactive son vi-mode.

Même en mode traditionnel, le retour arrière supprime le caractère, mais ne l'affiche pas immédiatement comme supprimé. (Après avoir appuyé sur ESC, les caractères ont disparu.)

Je suppose que vous devez choisir entre utiliser vice qui vient avec le comportement décrit ou utiliser vimqui peut le faire comme vous l'attendez.

michas
la source
9
  1. Vérifiez si vous utilisez réellement plain vivia

    $ vi --version | head -n 1

    Cela donne sur ma machine (Debian 7)

    VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Feb 10 2013 02:27:59)

    vim peut être conçu pour se comporter davantage comme vi. Cela peut être fait en donnant la commande viau lieu de vimla ligne de commande, où viest seulement un lien symbolique vers vim, auquel cas vim est ouvert en mode vi. Vous pouvez vérifier cela avec :set compatible?.

  2. Comme mentionné dans la réponse précédente, l'effet du retour arrière n'est visible qu'après avoir été activé insert modelorsque set compatibleest activé.

Remarque: en mode compatible avec vi, vous ne pouvez pas reculer sur du texte qui a été précédemment entré (avant d'être entré insert mode), ni dans un eol ou un retrait dans insert mode. voir :help 'bs'

    'backspace' 'bs'        string  (default "")
                            global
                            {not in Vi}
    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.

    When the value is empty, Vi compatible backspacing is used.
    For backwards compatibility with version 5.4 and earlier:
    value   effect
      0     same as ":set backspace=" (Vi compatible)
      1     same as ":set backspace=indent,eol"
      2     same as ":set backspace=indent,eol,start"

Essayez les différents paramètres pour comprendre leur signification: entrez les caractères / sauts de ligne et l'indentation en mode insertion, quittez et entrez de nouveau en mode insertion, puis essayez de revenir en arrière.

Les utilisateurs qui ne connaissent pas le comportement de vi et qui n'insistent pas sur l'utilisation de vi simple (non recommandé de toute façon) devraient :set backspace=indent,eol,start. Afaik sur Debian, un fichier de configuration à l'échelle du système est généralement installé avec ce paramètre.

Vous pouvez obtenir le réglage actuel via :set bs?.

Hotschke
la source
5

Créez un nouveau fichier dans le répertoire personnel de l'utilisateur appelé .vimrc s'il n'est pas déjà là. Ici, nous allons créer et éditer en même temps avec vi

sudo vi ~/.vimrc

Ajoutez les commandes suivantes, qui incluent la désactivation du mode de compatibilité et la fonctionnalité d'effacement des touches de retour arrière:

set nocp
set backspace=indent,eol,start

Enregistrer et quitter le fichier en utilisant

:wq

La désactivation du mode de compatibilité permet d'utiliser les touches fléchées auxquelles les anciens utilisateurs vi sont habitués.

Étant donné que nous avons créé un fichier lors de la création du fichier, la propriété du fichier sera probablement root. Vous pouvez montrer le fichier à l'utilisateur.

Dans mon cas, c'était pour une framboise pi, donc l'utilisateur et le groupe sont pi:

chown pi:pi ~/.vimrc

Maintenant, relancez vi et profitez-en!

recurse
la source
1
set nocpa fait l'affaire pour moi
Louis M
0

placez juste dans votre ~/.zshrc

bindkey "^?" backward-delete-char
jhvaras
la source