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-mode
sur nil
ne 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 l
aprè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
la source
hack-local-variables-hook
- pour l' essentiel undo ce que d' autres grands-modes définis dans le cadre de leur initialisation standard.fundamental-mode
est juste une petite fonction à l' intérieursimple.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.:set paste
? Cela dit essentiellement "ne touchez en aucune façon au texte collé". Ce qui inclut également l'indentation automatique.Réponses:
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
RET
clé (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 commandenewline-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: lierC-j
ànewline
(identique àRET
).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 avecM-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.la source
electric-indent-mode
est 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-mode
n'est pas disponible viaM-x
. AideRET
mentionne trois paramètres:use-hard-newlines
,auto-fill-function
etfill-column
. Basculement ou de modifier les viaM-x use-hard-lines
,M-x auto-fill-mode
etM-x set-fill-column RET 0 RET
ne pas aider.emacs -q
? Veuillez coller un court texte contenant une nouvelle ligne (par exemple une nouvellefoo
lignebar
) dans Emacs et appuyez surC-h l
, que voyez-vous?… f o o RET b a r
ou… f o o C-j b a r
ou… f o o RET C-j bar
ou autre chose? Dans quel terminal exécutez-vous le client SSH?-q
n'aide pas (par exempleemacs -q -nw --no-desktop
). Je voisC-j
au lieu deRET
. J'utilise PuTTY 0.63 comme client SSH. Je vois le même comportement avecTERM
set toscreen
etxterm
.global-set-key
hack a résolu le problème. Je trouverai un moyen de configurer mesEDITOR
alias 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.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-paste
que 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 emacsM-x
.la source