如何从 Emacs 运行 Perl 脚本?

问题描述 投票:0回答:5

我正在学习如何在 Emacs 中使用 Perl。我曾经使用 R-Studio 运行 R。

如何在不离开 Emacs 的情况下执行命令?

示例:在 R-studio I 中输入

    print("hello world") 

然后按 Ctrl+Enter,R-studio 执行命令并打印

"hello world"
。 如何在 Emacs 中对 Perl 命令执行相同的操作?

我通常输入 Ctrl+X Ctrl+F test.pl

    print "hello world";

然后我不知道如何让Emacs执行该命令。

perl emacs
5个回答
3
投票

对于各种解释语言,我使用 isend-mode,它允许将缓冲区的一部分发送到另一个缓冲区中的终端。

以下是如何使用它(安装后):

  1. 打开

    ansi-term
    缓冲区:

    M-x

    ansi-term
    RET
    /bin/bash
    RET

    并在其中运行交互式 Perl 会话:

    perl -d -e 42
    RET

    或者,安装 term-run.el 并直接在

    term
    缓冲区中启动交互式 Perl 会话:

    M-x

    term-run-shell-command
    RET
    perl -d -e 42
    RET

  2. 用要执行的代码打开缓冲区,并将其关联到解释器缓冲区:

    M-x

    isend
    RET
    *ansi-term*
    RET

  3. 在 Perl 缓冲区中点击 C-RET 将当前行发送到

    ansi-term
    缓冲区中的解释器。如果某个区域处于活动状态,则将发送跨越该区域的所有线路。


下面是建议的设置,可以更好地利用 perl 调试器特定命令。通过以下自定义,

x
会添加到除
print
命令之外的所有指令之前(以便您看到结果)。

(defun isend--perl (buf-name)
  "Prepend 'x ' to normal perl instructions.
Leave 'print' instructions untouched."
  (with-current-buffer buf-name
    (goto-char (point-min))
    (unless (looking-at "[[:space:]]*print")
      (insert "x ")))
  (insert-buffer-substring buf-name))

(defun isend-default-perl-setup ()
  (when (eq major-mode 'perl-mode)
    (set (make-local-variable 'isend-send-line-function) #'isend--perl)))

(add-hook 'isend-mode-hook #'isend-default-perl-setup)

3
投票

如果您可以加载 CPerl 模式(如果您加载扩展名为 .pl 的文件,Emacs 应该默认这样做),您还应该在菜单栏中获得 Perl 菜单(假设您在 GUI 中运行,而不是在简单的终端中运行) ).

从 Perl 菜单中,只需选择“运行”! 当前缓冲区(Perl 脚本)将运行(系统将首先提示您输入任何参数),并将结果显示在新缓冲区中。


2
投票

这就是我用的:

-x shell

perl test.pl


1
投票

如果我从 Emacs 中运行 Perl,通常是为了处理文本区域或将命令结果插入缓冲区。

M-!
(即 Meta-Shift-1)将执行 shell 命令,并将结果显示在迷你缓冲区中。

使用前缀参数 (M-1) 为命令添加前缀将在该点插入命令的输出。

例如,将 (x)HTML 文件存根到空缓冲区中:

M-1 M-!
perl -MCGI=:standard -e 'print start_html("Hello World"),end_html'

将产生以下结果:

<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>Hello World</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>

0
投票

我用

Meta-x编译。

Meta 是 alt 键。 缓冲区将在第一次打开命令 make -k 。 您可以删除它并输入

perl file.pl

第一次运行该命令,emacs 下次会记住它。 如果你想要真正喜欢,你可以打开 ~/.emacs.d/init.el 文件并输入以下内容

(add-hook 'cperl-mode-hook
          (lambda ()
            (set (make-local-variable 'compile-command)
                 (format "perl %s" (file-name-nondirectory buffer-file-name)))))

(add-hook 'perl-mode-hook
          (lambda ()
            (set (make-local-variable 'compile-command)
                 (format "perl %s" (file-name-nondirectory buffer-file-name)))))

(global-set-key (kbd "<f5>") 'compile)

现在要编译,您只需按 f5 即可,emacs 应该运行正确的命令。 Emacs 也会保存该命令以供下次编译时使用。 我更喜欢 cperl 模式,但这也应该适用于 perl 模式。 我从一个做同样事情的人那里得到了这个,但是这里是 javascript

我可以更改emacs的默认编译命令吗?

你也可以跑步

Meta-x外壳

并使用打开的 shell 窗口来运行

perl file.pl

我通常懒得做其中任何一个。 我将用 & 符号打开 emacs 以返回这样的命令行

emacs file.pl &

如果您正在运行 GUI,终端将在 Emacs 中打开该文件并返回命令行。 当我想运行它时,我只需返回终端窗口并运行

perl file.pl

如果我没有运行 GUI,例如通过 ssh 或 wsl,我通常只会打开两个终端窗口。 一种用于 emacs,一种用于运行命令。

© www.soinside.com 2019 - 2024. All rights reserved.