4

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

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

示例:在 R-studio 中输入

    print("hello world") 

然后按Ctrl+Enter和 R-studio 执行命令并打印"hello world". 如何在 Emacs 中为 Perl 命令执行相同的操作?

我通常输入Ctrl++ X Ctrltest.plF

    print "hello world";

然后我不知道 Emacs 执行命令该怎么做。

4

4 回答 4

4

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

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

  1. 打开ansi-term缓冲区:

    M-xansi-termRET/bin/bashRET

    并在里面运行一个交互式 perl 会话:

    perl -d -e 42RET

    或者,安装term-run.elterm并直接在缓冲区中启动交互式 perl 会话:

    M-xterm-run-shell-commandRETperl -d -e 42RET

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

    M-xisendRET*ansi-term*RET

  3. 点击C-RETperl 缓冲区以将当前行发送到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)
于 2012-11-29T18:51:54.407 回答
2

这就是我使用的:

Meta-x shell

perl test.pl

于 2012-11-29T18:08:08.817 回答
2

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

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

于 2012-11-29T18:23:47.080 回答
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>
于 2012-11-30T17:41:18.723 回答