2012-11-29 53 views
4

我正在學習如何在Emacs使用Perl。我曾經用R-Studio運行R.在Emacs執行Perl,最基本的

我如何不留Emacs的執行命令?

示例:在R-工作室I型

print("hello world") 

並按Ctrl鍵 + 輸入和R-工作室執行該命令並打印"hello world"。 如何在Emacs中執行Perl命令?

我通常鍵入按Ctrl +X按Ctrl +˚F test.pl

print "hello world"; 

,然後我不知道該怎麼辦了Emacs的要執行的命令。

回答

4

對於各種解釋語言,我使用isend-mode,其允許發送緩衝器的部分在另一個緩衝器中的終端。

這裏是你將如何使用它(已經安裝後):

  1. 打開一個ansi-term緩衝:

    的Mxansi-termRET/bin/bashRET

    和在裏面運行一個交互式Perl會話:

    perl -d -e 42RET

    可替代地,安裝term-run.el並在term緩衝器直接啓動交互式perl的會話:

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

  2. 打開噸他要執行的代碼緩存,它關聯到翻譯緩衝區:

    的MxisendRET*ansi-term*RET

  3. 命中C-RET在Perl的緩衝區送到ansi-term緩衝區中解釋器的當前行。如果某區域處於活動狀態,則會發送跨越該區域的所有線路。


下面是提出的設置允許更好地利用Perl調試特定命令的優勢。通過以下定製,除了print命令之外,x被預置爲所有指令(以便您可以看到結果)。

(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) 
+0

我正在努力獲得isend模式,希望這會奏效。謝謝您的幫助。當我設法獲得擴展名時,我會更新。 –

+0

@Francesco。這很好,但在我的實驗中,解釋器不會打印或運行任何東西,直到您將EOF發送給解釋器(您必須從運行解釋器的緩衝區執行此操作)。任何方式'isend-mode'都可以爲你做點什麼? –

+0

你可以在調試模式下啓動'perl'來獲得一個交互式的perl環境(在這個環境中對行進行解釋)。 perldebug(1)手冊頁包含所有的細節,但是你可以用'perl -d -e 42' – Francesco

1

這是我用:

-x shell

perl test.pl

1

如果你可以加載CPerl模式(Emacs的應該做的,默認情況下,如果您加載一個文件,.pl擴展),你還應該在你的菜單欄中獲得Perl菜單(假設你正在GUI中運行,而不是簡單的終端)。

從Perl的菜單,只要選擇 「運行」!當前的緩衝區(Perl腳本)將會運行(首先會提示您輸入任何參數),並將結果顯示在新的緩衝區中。

+0

我使用一個GUI,但我不能看到一個「Perl菜單」。 –

+0

@FedericoC你確定你在'cperl-mode'而不是'perl-mode'? – jordanm

+0

@jordanm我不知道如何去做或設置。我嘗試了Ctrl + x cperl-mode,但是我沒有看到任何改變。 –

0

如果我在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>