Frage

Ich habe Computer ein paar Mal vor kurzem eingeschaltet, und irgendwo auf dem Weg ich meine .emacs verloren. Ich versuche, es wieder aufzubauen, aber während ich dabei bin, ich dachte, dass ich andere gute abholen würde Konfigurationen, die andere Leute benutzen.

Also, wenn Sie Emacs verwenden, was in die .emacs?

Meine ist ziemlich öde gerade jetzt, mit nur:

  1. Globaler font-Lock-Modus! (global-font-lock-mode 1)
  2. Meine persönlichen Vorlieben in Bezug auf Einzüge, Tabulatoren und Leerzeichen enthalten.
  3. Verwenden Sie cperl-Modus statt perl-Modus.
  4. Eine Verknüpfung für die Kompilierung.

Was denken Sie, ist nützlich?

War es hilfreich?

Lösung

Mit der ultimative dotfiles Website . Fügen Sie Ihre‘Emacs hier. Lesen Sie die‘Emacs anderer.

Andere Tipps

Mein Liebling Schnipsel. Die ultimative Emacs Augenschmaus:

;; real lisp hackers use the lambda character
;; courtesy of stefan monnier on c.l.l
(defun sm-lambda-mode-hook ()
  (font-lock-add-keywords
   nil `(("\\<lambda\\>"
   (0 (progn (compose-region (match-beginning 0) (match-end 0)
        ,(make-char 'greek-iso8859-7 107))
      nil))))))
(add-hook 'emacs-lisp-mode-hook 'sm-lambda-mode-hook)
(add-hook 'lisp-interactive-mode-hook 'sm-lamba-mode-hook)
(add-hook 'scheme-mode-hook 'sm-lambda-mode-hook)

Sie sehen also, das heißt, die folgenden bei der Bearbeitung von Lisp / Schema:

(global-set-key "^Cr" '(λ () (interactive) (revert-buffer t t nil)))

Ich habe diese yes zu ändern oder no Aufforderung y oder n fordert:

(fset 'yes-or-no-p 'y-or-n-p)

Ich habe diese Emacs zu starten, ohne so viel „Fanfare“, die ich bekam von diese Frage .

(setq inhibit-startup-echo-area-message t)
(setq inhibit-startup-message t)

Und Steve Yegge die Funktion eine Datei, die Sie‘umbenennen re Bearbeitung zusammen mit seinem entsprechenden Puffer:

(defun rename-file-and-buffer (new-name)
  "Renames both current buffer and file it's visiting to NEW-NAME."
  (interactive "sNew name: ")
  (let ((name (buffer-name))
 (filename (buffer-file-name)))
    (if (not filename)
 (message "Buffer '%s' is not visiting a file!" name)
      (if (get-buffer new-name)
   (message "A buffer named '%s' already exists!" new-name)
 (progn
   (rename-file name new-name 1)
   (rename-buffer new-name)
   (set-visited-file-name new-name)
   (set-buffer-modified-p nil))))))

Eine Sache, die als sehr nützlich erweisen kann: Bevor es zu groß wird, versuchen Sie es in mehrere Dateien für verschiedene Aufgaben aufgeteilt: My .emacs setzt nur meine Last-Pfad und die Lasten eine Reihe von Dateien - ich habe alle haben mein Modus spezifische Einstellungen in mode-configs.el, keybindings in keys.el, et cetera

Meine .emacs ist nur 127 Zeilen, hier sind die nützlichsten kleine Schnipsel:

;; keep backup files neatly out of the way in .~/
(setq backup-directory-alist '(("." . ".~")))

Das macht die * ~ Dateien, die ich Unordnung auf das Verzeichnis, in ein spezielles Verzeichnis gehen zu finden, in diesem Fall. ~

;; uniquify changes conflicting buffer names from file<2> etc
(require 'uniquify)
(setq uniquify-buffer-name-style 'reverse)
(setq uniquify-separator "/")
(setq uniquify-after-kill-buffer-p t) ; rename after killing uniquified
(setq uniquify-ignore-buffers-re "^\\*") ; don't muck with special buffers

Dies setzt uniquify die sich ändert, diese hässlichen Datei <2> usw. Puffer-Namen Sie aufstehen, wenn mehrere Dateien mit dem gleichen Namen in eine viel sauberere eindeutigen Namen haben so viel von der gesamten Pfad der Datei, wie es muss.

Das ist es ... der Rest ziemlicher Standard ist, dass ich bin sicher, dass jeder kennt.

Dies ist nicht das ganze Set und kaboodle, aber es ist einige der nützlicheren Schnipsel ich gesammelt habe:

(defadvice show-paren-function (after show-matching-paren-offscreen
                                      activate)
  "If the matching paren is offscreen, show the matching line in the                               
echo area. Has no effect if the character before point is not of                                   
the syntax class ')'."
  (interactive)
  (let ((matching-text nil))
    ;; Only call `blink-matching-open' if the character before point                               
    ;; is a close parentheses type character. Otherwise, there's not                               
    ;; really any point, and `blink-matching-open' would just echo                                 
    ;; "Mismatched parentheses", which gets really annoying.                                       
    (if (char-equal (char-syntax (char-before (point))) ?\))
        (setq matching-text (blink-matching-open)))
    (if (not (null matching-text))
        (message matching-text))))

;;;;;;;;;;;;;;;
;; UTF-8
;;;;;;;;;;;;;;;;;;;;
;; set up unicode
(prefer-coding-system       'utf-8)
(set-default-coding-systems 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
;; This from a japanese individual.  I hope it works.
(setq default-buffer-file-coding-system 'utf-8)
;; From Emacs wiki
(setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING))
;; Wwindows clipboard is UTF-16LE 
(set-clipboard-coding-system 'utf-16le-dos)


(defun jonnay-timestamp ()
  "Spit out the current time"
  (interactive)
  (insert (format-time-string "%Y-%m-%d")))

(defun jonnay-sign ()
  "spit out my name, email and the current time"
  (interactive)
  (insert "-- Jonathan Arkell (jonathana@criticalmass.com)")
  (jonnay-timestamp))


;; Cygwin requires some seriosu setting up to work the way i likes it
(message "Setting up Cygwin...")
(let* ((cygwin-root "c:")
       (cygwin-bin (concat cygwin-root "/bin"))
       (gambit-bin "/usr/local/Gambit-C/4.0b22/bin/")
       (snow-bin "/usr/local/snow/current/bin")
       (mysql-bin "/wamp/bin/mysql/mysql5.0.51a/bin/"))
   (setenv "PATH" (concat cygwin-bin ";" ;
                          snow-bin ";" 
                          gambit-bin ";"
                          mysql-bin ";"
                          ".;")  
           (getenv "PATH"))
   (setq exec-path (cons cygwin-bin exec-path)))

(setq shell-file-name "bash")
(setq explicit-shell-file-name "bash")

(require 'cygwin-mount)
(cygwin-mount-activate)
(message "Setting up Cygwin...Done")


; Completion isn't perfect, but close
(defun my-shell-setup ()
   "For Cygwin bash under Emacs 20+"
   (setq comint-scroll-show-maximum-output 'this)
   (setq comint-completion-addsuffix t)
   (setq comint-eol-on-send t)
   (setq w32-quote-process-args ?\")
   (make-variable-buffer-local 'comint-completion-addsuffix))

(setq shell-mode-hook 'my-shell-setup)
(add-hook 'emacs-startup-hook 'cygwin-shell)


; Change how home key works
(global-set-key [home] 'beginning-or-indentation)
(substitute-key-definition 'beginning-of-line 'beginning-or-indentation global-map)


(defun yank-and-down ()
  "Yank the text and go down a line."
  (interactive)
  (yank)
  (exchange-point-and-mark)
  (next-line))

(defun kill-syntax (&optional arg)
  "Kill ARG sets of syntax characters after point."
  (interactive "p")
  (let ((arg (or arg 1))
    (inc (if (and arg (< arg 0)) 1 -1))
    (opoint (point)))
    (while (not (= arg 0))
      (if (> arg 0)
      (skip-syntax-forward (string (char-syntax (char-after))))
    (skip-syntax-backward (string (char-syntax (char-before)))))
      (setq arg (+ arg inc)))
    (kill-region opoint (point))))

(defun kill-syntax-backward (&optional arg)
  "Kill ARG sets of syntax characters preceding point."
  (interactive "p")
  (kill-syntax (- 0 (or arg 1))))

(global-set-key [(control shift y)] 'yank-and-down)
(global-set-key [(shift backspace)] 'kill-syntax-backward)
(global-set-key [(shift delete)] 'kill-syntax)


(defun insert-file-name (arg filename)
  "Insert name of file FILENAME into buffer after point.
  Set mark after the inserted text.

  Prefixed with \\[universal-argument], expand the file name to
  its fully canocalized path.

  See `expand-file-name'."
  ;; Based on insert-file in Emacs -- ashawley 2008-09-26
  (interactive "*P\nfInsert file name: ")
  (if arg
      (insert (expand-file-name filename))
      (insert filename)))

(defun kill-ring-save-filename ()
  "Copy the current filename to the kill ring"
  (interactive)
  (kill-new (buffer-file-name)))

(defun insert-file-name ()
  "Insert the name of the current file."
  (interactive)
  (insert (buffer-file-name)))

(defun insert-directory-name ()
  "Insert the name of the current directory"
  (interactive)
  (insert (file-name-directory (buffer-file-name))))

(defun jonnay-toggle-debug ()
  "Toggle debugging by toggling icicles, and debug on error"
  (interactive)
  (toggle-debug-on-error)
  (icicle-mode))


(defvar programming-modes
  '(emacs-lisp-mode scheme-mode lisp-mode c-mode c++-mode 
    objc-mode latex-mode plain-tex-mode java-mode
    php-mode css-mode js2-mode nxml-mode nxhtml-mode)
  "List of modes related to programming")

; Text-mate style indenting
(defadvice yank (after indent-region activate)
  (if (member major-mode programming-modes)
      (indent-region (region-beginning) (region-end) nil)))

Ich habe eine Menge von anderen, die bereits erwähnt wurde, aber diese sind unbedingt notwendig, meiner Meinung nach:

(transient-mark-mode 1) ; makes the region visible
(line-number-mode 1)    ; makes the line number show up
(column-number-mode 1)  ; makes the column number show up

Sie können hier: http://www.dotemacs.de/

Und meine .emacs ist ziemlich lang, um es auch hier, so ist es die Antwort macht nicht allzu lesbar. Wie auch immer, wenn Sie es wünschen kann ich schicke es an dir.

Auch würde ich Ihnen empfehlen, diese zu lesen: http: // steve. yegge.googlepages.com/my-dot-emacs-file

Hier sind einige Tastenbelegungen, die ich abhängig geworden sind, auf:

(global-set-key [(control \,)] 'goto-line)
(global-set-key [(control \.)] 'call-last-kbd-macro)
(global-set-key [(control tab)] 'indent-region)
(global-set-key [(control j)] 'join-line)
(global-set-key [f1] 'man)
(global-set-key [f2] 'igrep-find)
(global-set-key [f3] 'isearch-forward)
(global-set-key [f4] 'next-error)
(global-set-key [f5] 'gdb)
(global-set-key [f6] 'compile)
(global-set-key [f7] 'recompile)
(global-set-key [f8] 'shell)
(global-set-key [f9] 'find-next-matching-tag)
(global-set-key [f11] 'list-buffers)
(global-set-key [f12] 'shell)

Einige andere verschiedene Sachen, vor allem für C ++ Entwicklung:

;; Use C++ mode for .h files (instead of plain-old C mode)
(setq auto-mode-alist (cons '("\\.h$" . c++-mode) auto-mode-alist))

;; Use python-mode for SCons files
(setq auto-mode-alist (cons '("SConstruct" . python-mode) auto-mode-alist))
(setq auto-mode-alist (cons '("SConscript" . python-mode) auto-mode-alist))

;; Parse CppUnit failure reports in compilation-mode
(require 'compile)
(setq compilation-error-regexp-alist
      (cons '("\\(!!!FAILURES!!!\nTest Results:\nRun:[^\n]*\n\n\n\\)?\\([0-9]+\\)) test: \\([^(]+\\)(F) line: \\([0-9]+\\) \\([^ \n]+\\)" 5 4)
            compilation-error-regexp-alist))

;; Enable cmake-mode from http://www.cmake.org/Wiki/CMake_Emacs_mode_patch_for_comment_formatting
(require 'cmake-mode)
(setq auto-mode-alist
      (append '(("CMakeLists\\.txt\\'" . cmake-mode)
                ("\\.cmake\\'" . cmake-mode))
              auto-mode-alist))

;; "M-x reload-buffer" will revert-buffer without requiring confirmation
(defun reload-buffer ()
  "revert-buffer without confirmation"
  (interactive)
  (revert-buffer t t))

die Webseite aktualisieren Sie aus Emacs Bearbeitung sind

(defun moz-connect()
  (interactive)
  (make-comint "moz-buffer" (cons "127.0.0.1" "4242"))
  (global-set-key "\C-x\C-g" '(lambda () 
                (interactive)
                (save-buffer)
                (comint-send-string "*moz-buffer*" "this.BrowserReload()\n"))))

In Kombination mit http://hyperstruct.net/projects/mozlab

Sie können meine Konfiguration (sowohl in HTML & in tar'ed Archiv) auf meine Website . Es enthält viele Einstellungen für verschiedene Modi

Dieser Block ist das wichtigste für mich:

(setq locale-coding-system 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-selection-coding-system 'utf-8)
(prefer-coding-system 'utf-8)

Ich habe noch nie auf den Unterschied zwischen denen klar gewesen, though. Cargo-Kult, ich denke ...

Ich versuche, meine .emacs organisiert zu halten. Die Konfiguration wird immer noch in Arbeit sein, aber ich beginne mit der Gesamtstruktur, zufrieden zu sein.

Alle Sachen sind unter ~/.elisp, ein Verzeichnis, das unter Versionskontrolle ist (ich benutze git, wenn das von Interesse ist). ~/.emacs verweist einfach auf ~/.elisp/dotemacs die selbst ~/.elisp/cfg/init gerade lädt. Diese Datei wiederum importiert verschiedene Konfigurationsdateien über require. Dies bedeutet, dass die Konfigurationsdateien wie Modi verhalten müssen: sie Sachen importieren sie hängen von und sie provide sich am Ende der Datei, zum Beispiel (provide 'my-ibuffer-cfg). Ich Präfix alle Kennungen, die in meiner Konfiguration mit my- definiert sind.

ich die Konfiguration in Bezug auf Modi / Themen / Aufgaben organisieren, nicht durch ihre technischen Auswirkungen, zum Beispiel I nicht hat eine separate Konfigurationsdatei, in der alle keybindings oder Flächen definiert werden.

Meine init.el definiert die folgenden Haken, um sicherzustellen, dass Emacs Konfigurationsdateien neu kompiliert, wenn gespeichert (kompiliert Elisp viel schneller geladen, aber ich will nicht, diesen Schritt manuell tun):

;; byte compile config file if changed
(add-hook 'after-save-hook
          '(lambda ()
                   (when (string-match
                          (concat (expand-file-name "~/.elisp/cfg/") ".*\.el$")
                          buffer-file-name)
           (byte-compile-file buffer-file-name))))

Dies ist die Verzeichnisstruktur für ~/.elisp:

~/.elisp/todo.org: Org-Modus Datei, in der ich den Überblick über Dinge halten, die noch getan werden muss (+ Wunschliste Artikel)

.

~/.elisp/dotemacs. Symlink Ziel für ~/.emacs, Lasten ~/.elisp/cfg/init

~/.elisp/cfg. Meine eigenen Konfigurationsdateien

~/.elisp/modes. Modi, die nur aus einer einzigen Datei bestehen

~/.elisp/packages. Anspruchsvolle Modi mit Lisp, Dokumentation und wahrscheinlich Ressourcendateien

verwende ich GNU Emacs, dass Version keine wirkliche Unterstützung für Pakete. Deshalb organisiere ich sie manuell, in der Regel wie folgt aus: ~/.elisp/packages/foobar-0.1.3 ist das Stammverzeichnis für das Paket. Subdirectory lisp hält alle Lisp-Dateien und info ist, wo die Dokumentation hinausgeht. ~/.elisp/packages/foobar ist ein symbolischer Link, der auf die aktuell verwendete Version des Pakets zeigt, so dass ich, wenn ich etwas nicht aktualisieren muss meine Konfigurationsdateien ändern. Für einige Pakete ich eine ~/.elisp/packages/foobar.installation Datei halten um, in dem halte ich Notizen über den Installationsprozess. Aus Performance-Gründen kompilieren ich alle elisp Dateien in neu installierten Pakete, sollte dies der Fall standardmäßig nicht sein.

Hier ein paar meiner eigenen Sachen:

Einsätze Datum im ISO-8601-Format:

(defun insertdate ()
  (interactive)
  (insert (format-time-string "%Y-%m-%d")))

(global-set-key [(f5)] 'insertdate)

Für C ++ Programmierer erstellt eine Klasse Skelett (Klasse Name ist der gleiche wie der Dateiname ohne Erweiterung sein):

(defun createclass ()
  (interactive)
  (setq classname (file-name-sans-extension (file-name-nondirectory   buffer-file-name)))
  (insert 
"/**
  * " classname".h 
  *
  * Author: Your Mom
  * Modified: " (format-time-string "%Y-%m-%d") "
  * Licence: GNU GPL
  */
#ifndef "(upcase classname)"
#define "(upcase classname)"

class " classname "
{
  public:
    "classname"();
    ~"classname"();

  private:

};
#endif
"))

Erstellen Sie automatisch schließende Klammern:

(setq skeleton-pair t)
(setq skeleton-pair-on-word t)
(global-set-key (kbd "[") 'skeleton-pair-insert-maybe)
(global-set-key (kbd "(") 'skeleton-pair-insert-maybe)
(global-set-key (kbd "{") 'skeleton-pair-insert-maybe) 
(global-set-key (kbd "<") 'skeleton-pair-insert-maybe)

ich verwende paredit für die einfache (e) Lisp Handhabung und Ido-Modus Minipuffer Fertigstellungen.

Es ist schwer, diese Frage zu beantworten, weil jeder Emacs verwendet für sehr verschiedene Zwecke.

Weiter mehr, eine bessere Praxis können Ihre dotemacs zu küssen. Da die Einfache Anpassung Schnittstelle wird allgemein unterstützt unter Emacs-Modus, sollten Sie alle Ihre Anpassung in Ihrem custom-file (die über einen separaten Ort in Ihrem dotemacs sein können), und für den dotemacs , setzen sie in nur Einstellungen Lastpfad, Paket erfordert, Haken und Tastenbelegungen. Sobald Sie anfangen Emacs Starter Kit verwenden, eine ganze nützliche Bündel von Einstellungen von Ihrem dotemacs entfernt werden, auch.

Siehe EmacsWiki DotEmacs Kategorie. Es bietet viele Links zu Seiten, auf diese Frage Adressierung.

(put 'erase-buffer 'disabled nil)
(put 'downcase-region 'disabled nil)
(set-variable 'visible-bell t)
(set-variable 'tool-bar-mode nil)
(set-variable 'menu-bar-mode nil)

(setq load-path (cons (expand-file-name "/usr/share/doc/git-core/contrib/emacs") load-path))
 (require 'vc-git)
 (when (featurep 'vc-git) (add-to-list 'vc-handled-backends 'git))
 (require 'git)
 (autoload 'git-blame-mode "git-blame"
           "Minor mode for incremental blame for Git." t)

Ich habe einige praktische Verknüpfungen zu Webseiten und Suchen mit webjump

(require 'webjump)
(global-set-key [f2] 'webjump)
(setq webjump-sites
      (append '(
        ("Reddit Search" .
         [simple-query "www.reddit.com" "http://www.reddit.com/search?q=" ""])
        ("Google Image Search" .
         [simple-query "images.google.com" "images.google.com/images?hl=en&q=" ""])
        ("Flickr Search" .
         [simple-query "www.flickr.com" "flickr.com/search/?q=" ""])
        ("Astar algorithm" . 
         "http://www.heyes-jones.com/astar")
        )
          webjump-sample-sites))

Blog-Post über, wie das funktioniert hier

http: //justinsboringpage.blogspot .com / 2009/02 / search-reddit-flickr-and-google-from.html

Auch empfehle ich diese:

(setq visible-bell t) ; no beeping

(setq transient-mark-mode t) ; visually show region

(setq line-number-mode t) ; show line numbers

(setq global-font-lock-mode 1) ; everything should use fonts

(setq font-lock-maximum-decoration t)

ich von einigen der überflüssigen gui Sachen erhalten auch los

  (if (fboundp 'scroll-bar-mode) (scroll-bar-mode -1))
  (if (fboundp 'tool-bar-mode) (tool-bar-mode -1))
  (if (fboundp 'menu-bar-mode) (menu-bar-mode -1)))

Eine Zeile des Lastpfad zu ändern Eine Zeile meiner init-Bibliothek zu laden Eine Zeile meines Emacs-init-Dateien laden

Natürlich ist die „Emacs init-Dateien“ sind sehr zahlreich, ein pro bestimmten Sache, geladen in einer deterministischen Reihenfolge.

Emacs-Starter-Kit als Basis, ich dann habe hinzugefügt .. vimpulse.el, whitespace.el, yasnippet, textmate.el und newsticker.el.

In meiner ~ / .emacs.d / $ USERNAME.el (dbr.el-Datei):

(add-to-list 'load-path (concat dotfiles-dir "/vendor/"))

;; Snippets
(add-to-list 'load-path "~/.emacs.d/vendor/yasnippet/")
(require 'yasnippet)

(yas/initialize)
(yas/load-directory "~/.emacs.d/vendor/yasnippet/snippets")

;; TextMate module
(require 'textmate)
(textmate-mode 'on)

;; Whitespace module
(require 'whitespace)
(add-hook 'ruby-mode-hook 'whitespace-mode)
(add-hook 'python-mode-hook 'whitespace-mode)

;; Misc
(flyspell-mode 'on)
(setq viper-mode t)
(require 'viper)
(require 'vimpulse)

;; IM
(eval-after-load 'rcirc '(require 'rcirc-color))
(setq rcirc-default-nick "_dbr")
(setq rcirc-default-user-name "_dbr")
(setq rcirc-default-user-full-name "_dbr")

(require 'jabber)

;;; Google Talk account
(custom-set-variables
 '(jabber-connection-type (quote ssl))
 '(jabber-network-server "talk.google.com")
 '(jabber-port 5223)
 '(jabber-server "mysite.tld")
 '(jabber-username "myusername"))

;; Theme
(color-theme-zenburn)

;; Key bindings
(global-set-key (kbd "M-z") 'undo)
(global-set-key (kbd "M-s") 'save-buffer)
(global-set-key (kbd "M-S-z") 'redo)

Nach der Lektüre dieses, dachte ich, es wäre gut für die besten .emacs Modifikationen nur eine einfache Website zu haben. Fühlen Sie sich frei zu schreiben und abstimmen sie hier:

http://dotemacs.slinkset.com/

Ich bin neu in Emacs, in meinem .emacs dort Datei

  • Vertiefung Konfiguration
  • Farbe Thema
  • php-Modus, Kaffee-Modus und js2 Modus
  • Ido-Modus

viele Sachen: https://github.com/tavisrudd/emacs.d

el-get hat es geschafft die Verwaltung und Abhängigkeiten viel einfacher: https://github.com/tavisrudd/emacs.d/blob/ Master / dss-init-el-get.el

Für Scala Coder

;; Load the ensime lisp code... http://github.com/aemoncannon/ensime
(add-to-list 'load-path "ENSIME_ROOT/elisp/")
(require 'ensime)
;; This step causes the ensime-mode to be started whenever ;; scala-mode is started for a buffer. You may have to customize this step ;; if you're not using the standard scala mode.
(add-hook 'scala-mode-hook 'ensime-scala-mode-hook)
;; MINI HOWTO:  ;; Open .scala file. M-x ensime (once per project)

Meine Emacs-Konfiguration hat ziemlich groß im Laufe der Jahre gewachsen, und ich habe viele nützliche Sachen für mich da, aber wenn ich zwei Funktionen haben wäre es wahrscheinlich jene diejenigen gewesen sein.

definieren C-x UP und C-x DOWN, um die aktuelle Zeile bewegen oder unten die Cursor an der richtigen Stelle zu halten:

;Down/UP the current line
(global-set-key '[(control x) (up)] 'my-up-line)
(global-set-key '[(control x) (down)] 'my-down-line)
(defun my-down-line()
  (interactive)
  (let ((col (current-column)))
    (forward-line 1)
    (transpose-lines 1)
    (forward-line -1)
    (forward-char col)
    )
  )

(defun my-up-line()
  (interactive)
  (let ((col (current-column)))
    (transpose-lines 1)
    (forward-line -2)
    (forward-char col)
    )
  )
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top