http://qs321.pair.com?node_id=442036


in reply to Desparately seeking a bilingual vim/Emacs expert

I'm not sure there are exact mappings between vim and emacs, since they use different concepts.

  1. I have several macro-like functions which I've defined for Perl programming convenience. For example, this creates a new sub:

    (defun perl-sub (name) "Insert a new subroutine" (interactive "*sName: ") (insert "sub {\n\n\n\n}\n") (previous-line 4) (indent-for-tab-command) (insert "my () = @_;") (search-backward "sub ") (goto-char (match-end 0)) (insert name) (search-forward "("))

    It prompts for the sub name, then outputs a bare subroutine with "my () = @_;" on the first line and putting the cursor inside the `my' list. You can then call this function with `ESC x perl-sub'; you could also bind it to key command, for example (global-set-key [f3] 'perl-sub), then you can just hit the F3 key to do it. Modifying this to output Data::Dumper stuff (good idea) would be straight-forward.

  2. I'm not sure what document templates are for. You could easily include a file with `C-x i', though, or use the above "macro" technique.

  3. For indenting, I have this inside (custom-set-variables):

    '(cperl-close-paren-offset -4) '(cperl-continued-statement-offset 2) '(cperl-indent-level 4) '(cperl-indent-parens-as-block t) '(cperl-label-offset 0) '(cperl-tab-always-indent t)

    That gets pretty close to (tab) indenting consistently with what I think is the style seen in most Perl books and documentation.

Replies are listed 'Best First'.
Re^2: Desparately seeking a bilingual vim/Emacs expert
by TheDamian (Vicar) on Mar 24, 2005 at 19:50 UTC
    Modifying this to output Data::Dumper stuff (good idea) would be straight-forward.
    Here's my attempt. I'd be very grateful if someone who knows Emacs could actually try it.
    (defun perl-dbg (name) "Insert a debugging print statement" (insert "use Data::Dumper qw( Dumper );\nwarn Dumper [ ]\n") (search-backward "[ ")
    I'm not sure what document templates are for.
    The idea is that you hit a key, and the editor pastes in a template from another file. Any suggestions for how to do that would be greatly appreciated.
    For indenting, I have this inside (custom-set-variables):
    I'm guessing:
    '(cperl-close-paren-offset -4)
    Outdent 4 columns on a closing paren?

    '(cperl-continued-statement-offset 2)
    Indent 2 columns when a statement wraps?

    '(cperl-indent-level 4)
    Indent four columns per indentation level?

    '(cperl-indent-parens-as-block t)
    Indent parens like blocks?

    '(cperl-label-offset 0)
    Put labels in the zeroth column?

    '(cperl-tab-always-indent t)
    Convert tabs to spaces?

    Could someone knowledgeable confirm (or correct) those guesses?

      (defun perl-dbg () "Insert a debugging print statement" (interactive) (insert "use Data::Dumper qw( Dumper );\nwarn Dumper [ ];\n") (search-backward "[ ")) (global-set-key "\C-c\C-p" 'perl-dbg)
      Then typing CTL-C CTL-p inserts this text:
      use Data::Dumper qw( Dumper ); warn Dumper [ ];
      and leaves the cursor under the [ character. I wasn't sure if you wanted to prompt for the name of the variable(s) to dump, so I changed (defun perl-dbg (name) to (defun perl-dbg (). The statement (interactive) makes it interactive, so that it can be bound to a key combination. Here's a version that prompts for a variable name (or names):
      (defun perl-dbg (name) "Insert a debugging print statement" (interactive "svariable to dump: ") (insert "use Data::Dumper qw( Dumper );\nwarn Dumper ") (insert name) (insert ";\n"))
      There are probably better ways to handle strings in Emacs-Lisp, but I've only recently started playing with it.
        Thanks for debugging my attempted debugging tool!
        Excellent. Thank-you!