Désactiver complètement toutes les indentations automatiques


18

Comment désactiver complètement toute indentation automatique dans Emacs? Je dois le désactiver au moins pour le mode fondamental, mais je suis d'accord avec le fait qu'il soit désactivé globalement pour la session en cours.

Veuillez lire le reste de cette question avant de le déclarer en double. Toutes les autres réponses que j'ai trouvées concernent une désactivation beaucoup plus ciblée de l'indentation. Je veux vraiment désactiver complètement toutes les indentations automatiques pour toute la session.

Le réglage electric-layout-modesur nilne fonctionne pas.

Détails

Parfois, j'aime composer de gros messages de validation Git avec mon éditeur de texte ASCII Windows. Ces messages contiennent fréquemment des listes à puces, des blocs de code ou d'autres éléments où la mise en forme précise de mon document source est significative. Ma base de code est sous Linux et je me connecte à la box à l'aide d'un client SSH texte uniquement. Lorsque Git entre dans Emacs pour modifier le message de validation, je veux pouvoir copier le message de validation source dans le presse-papiers de Windows, puis le coller à l'aide des commandes de collage de Windows. Du point de vue d'Emacs, je tape ce qui a été trouvé dans le fichier texte Windows. Malheureusement, quand Emacs voit des lignes en retrait, il ajoute sa propre auto-indentation, donc j'obtiens cet immense triangle d'espaces le long du bord gauche du tampon.

J'utilise GNU Emacs 24.3.1.

solution de contournement

Ma solution de contournement actuelle consiste à transférer mon fichier texte Windows vers un système de fichiers monté par mon hôte Linux, à charger le fichier dans Emacs, puis à utiliser kill et yank pour transférer le contenu. C'est un peu maladroit.

Exemple

Voici un exemple de bloc de texte:

a

  - b
    c
    d

Voici comment cela apparaît lorsque je le colle dans Emacs-under-ssh via la pâte MSWin:

a

  - b
      c
          d

Si j'appuie C-h laprès avoir fait le collage, voici ce que je vois. Notez que les sauts de ligne sont saisis en utilisant C-j, non RET.

a C-j C-j SPC SPC - SPC b C-j SPC SPC SPC SPC c C-j
SPC SPC SPC SPC d C-j C-h l

Dans la mesure où certaines des variables connexes sont indent tampon local, il y aurait besoin d'être quelque chose qui court après le crochet en mode majeur - par exemple, peut - être [?] hack-local-variables-hook- pour l' essentiel undo ce que d' autres grands-modes définis dans le cadre de leur initialisation standard. fundamental-modeest juste une petite fonction à l' intérieur simple.el- à savoir (kill-all-local-variables) (run-mode-hooks). M-x find-function RET fundamental-mode RET- vous pouvez modifier / créer le vôtre selon vos besoins; cependant, si vous changez le nom, il ne sera pas utilisé par certaines fonctions - pensez donc à conserver le même nom.
lawlist


Emacs a-t-il un équivalent de vim :set paste? Cela dit essentiellement "ne touchez en aucune façon au texte collé". Ce qui inclut également l'indentation automatique.
Omair Majid

Réponses:


21

Emacs ≤24,3

Appuyer sur RET ne met pas en retrait par défaut (sauf dans certains modes de programmation, pour lesquels vous devez vérifier la configuration spécifique au mode, par exemple les paramètres «électriques»).

Les terminaux Unix collent normalement un caractère de retour chariot lorsque le contenu du presse-papiers contient une nouvelle ligne (représentée par le caractère de saut de ligne). Dans Emacs, un retour chariot ressemble à la RETclé (en fait, RET c'est le caractère retour chariot), tandis qu'un saut de ligne ressemble à (est) C-j.

Cependant, dans votre cas, le collage d'un saut de ligne entraîne un C-j, qui dans Emacs est lié à la commande newline-and-indent. Comme son nom l'indique, cette commande met en retrait. Je ne sais pas si PuTTY a un paramètre que vous pouvez modifier. Si vous souhaitez résoudre le problème du côté d'Emacs, il existe une solution de contournement facile à laquelle je pense que cela ne vous dérangera pas: lier C-jà newline(identique à RET).

(global-set-key "\C-j" 'newline)

Emacs ≥24,4

Dans Emacs 24.4, le mode de retrait électrique est activé par défaut. Il s'agit d'un mode mineur global, vous pouvez donc le désactiver partout en appelant (electric-indent-mode 0)et le basculer de manière interactive avec M-x electric-indent-mode RET.

Vous pouvez trouver ces informations dans le manuel, ou en consultant la documentation de la commande invoquée en appuyant sur Return(appuyez C-h k RET).

Vous pouvez l'activer dans un tampon spécifique avec electric-indent-local-mode. Certains modes de programmation (en particulier ceux de tiers) peuvent avoir leurs propres fonctionnalités d'indentation automatique qui ne suivent pas les paramètres du mode de retrait électrique.


electric-indent-modeest désactivé par défaut (cela correspond à ce que vous avez dit car j'utilise Emacs 24.3.1). L'activer et le désactiver n'aide pas. electric-indent-local-moden'est pas disponible via M-x. Aide RETmentionne trois paramètres: use-hard-newlines, auto-fill-functionet fill-column. Basculement ou de modifier les via M-x use-hard-lines, M-x auto-fill-modeet M-x set-fill-column RET 0 RETne pas aider.
M. Fooz

@MrFooz Oh, désolé, je n'avais pas prêté attention à la version Emacs dans votre question. Mais je me demande alors pourquoi vous obtenez une indentation automatique. Hmmm. Obtenez-vous une indentation automatique avec emacs -q? Veuillez coller un court texte contenant une nouvelle ligne (par exemple une nouvelle fooligne bar) dans Emacs et appuyez sur C-h l, que voyez-vous? … f o o RET b a rou … f o o C-j b a rou … f o o RET C-j barou autre chose? Dans quel terminal exécutez-vous le client SSH?
Gilles 'SO- arrête d'être méchant'

J'ai ajouté un exemple de texte de présentation au message d'origine. L'ajout -qn'aide pas (par exemple emacs -q -nw --no-desktop). Je vois C-jau lieu de RET. J'utilise PuTTY 0.63 comme client SSH. Je vois le même comportement avec TERMset to screenet xterm.
M. Fooz

@MrFooz Ok, puisque PuTTY envoie un LF plutôt qu'un CR, vous devez demander à Emacs de ne pas indenter sur un LF. C'est facile à désactiver globalement, j'ai édité ma réponse.
Gilles 'SO- arrête d'être méchant'

Merci, le global-set-keyhack a résolu le problème. Je trouverai un moyen de configurer mes EDITORalias pour les invoquer automatiquement au démarrage lors de la modification des messages de validation Git. Les retours à la ligne sont collés au lieu des retours chariot car j'ai configuré mon éditeur de texte Windows préféré pour utiliser les fins de ligne de style UNIX au lieu de celles de Windows.
M. Fooz

1

Vous pouvez également essayer le mode de collage entre crochets. Il s'agit d'une fonctionnalité de votre émulateur de terminal (PuTTY dans ce cas, versions 0.63 et supérieures) qui utilise des séquences d'échappement pour signaler que l'utilisateur colle quelque chose, puis à nouveau lorsque le collage se termine. Il y a un paquet Emacs appelé bracketed-pasteque vous pouvez installer, il permet à Emacs de reconnaître les séquences d'échappement et de passer à une image plus sûre pendant la durée du collage. Non seulement cela empêche l'indentation de se gâcher, mais cela empêche également un collage non autorisé d'exécuter des commandes dans votre session emacs M-x.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.