2010-08-19 6 views
3

Il doit y avoir une meilleure façon de mettre en retrait un bloc de code pour les messages stackoverflow en utilisant Emacs. Ma stratégie actuelle consiste à:Commande Emacs pour indenter le code de 4 espaces à formater pour le coller dans les messages stackoverflow

  1. Sélectionnez une région de texte
  2. exécutons Mx tiret code-rigide
  3. run Cx z trois fois reindent la région

Ce semble-méninges mort. S'il vous plaît, éclairez-moi sur la façon d'y arriver d'une manière intelligente et élégante.

+1

double possible: http://stackoverflow.com/questions/594156/using-emacs-to-indent-shift -4-code – aioobe

+0

Cx Cz ??? Cela suspend le cadre Emacs actif ... Vous ne devriez pas avoir besoin de plus que indent-code-rigidly –

+0

Typo: C-x z est ce que je voulais dire. Et, l'autre thread a déjà répondu à cela de différentes façons. – speciousfool

Répondre

3

Ce ne diffère pas de la réponse de scottfrazer, mais il est un peu plus facile de taper: C-u C-x C-i

+0

Moins de frappes que j'ai vues pour une solution intégrée et pas difficile à retenir. – speciousfool

+0

Je n'ai jamais su que C-u avait un préfixe par défaut de 4. Très utile – seans

5

J'ai récemment créé cette commande utile:

(defun stackoverflow-copy-code-snippet (begin end) 
    (interactive "r") 
    (let ((buffer (current-buffer))) 
    (with-temp-buffer 
     (insert-buffer-substring-no-properties buffer begin end) 
     (indent-rigidly (point-min) (point-max) 4) 
     (clipboard-kill-ring-save (point-min) (point-max))))) 

Je viens d'utiliser pour copier sa propre source dans ce poste. Comment méta!

+0

Pour une raison quelconque, lorsque j'exécute stackoverflow-copy-code-snippet, il ne copie pas la chaîne indentée dans le presse-papiers. Au lieu de cela, il copie "stackoverflow-copy-code-snippet" dans mon presse-papier. C'est sur emacs 23.2.1 – speciousfool

+0

J'utilisais 22.3, mais j'ai juste téléchargé et compilé 23.2 et stackoverflow-copy-code-snippet fonctionne toujours pour moi. Je devrais probablement avoir mentionné que cette routine indente le contenu de la région et le copie dans le presse-papiers du système, de sorte que vous devez définir la région avant de l'appeler. Cela pourrait expliquer le comportement que vous avez. – Sean

Questions connexes