4

私はEmacsでPerlを使う方法を学んでいます。以前はR-StudioでRを実行していました。

Emacsを離れずにコマンドを実行するにはどうすればよいですか?

例: R-studioで「

    print("hello world") 

Ctrl+を押すEnterと、R-studioがコマンドを実行して出力し"hello world"ます。PerlコマンドのEmacsで同じことをするにはどうすればよいですか?

私は通常Ctrl++ test.plX Ctrlと入力しますF

    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.elをインストールして、インタラクティブな perl セッションをtermバッファーで直接起動します。

    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 です) シェル コマンドを実行し、結果をミニ バッファーに表示します。

コマンドの前に前置引数 (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 に答える