명령이 쉘 모드에서 편집기를 열려고 할 때 Emacs 버퍼를 엽니다.

StackOverflow https://stackoverflow.com/questions/116560

  •  02-07-2019
  •  | 
  •  

문제

나는 Emacs의 쉘 모드를 사용하고 싶지만 몇 가지 단점이 있습니다.그 중 하나는 쉘 명령이 편집기를 호출하려고 할 때 새 버퍼를 여는 것이 충분히 똑똑하지 않다는 것입니다.예를 들어 환경 변수를 사용하면 VISUAL 로 설정 vim 나는 다음을 얻습니다. svn propedit:

$ svn propedit svn:externals . 
"svn-prop.tmp" 2L, 149C[1;1H
~                                                                               [4;1H~                                                                               [5;1H~                                                                               [6;1H~                                                                               [7;1H~            
...

(표현으로는 구별하기 어려울 수 있지만 끔찍하고 추악한 엉망입니다.)

와 함께 VISUAL 로 설정 "emacs -nw", 나는 얻다

$ svn propedit svn:externals .
emacs: Terminal type "dumb" is not powerful enough to run Emacs.
It lacks the ability to position the cursor.
If that is not the actual type of terminal you have,
use the Bourne shell command `TERM=... export TERM' (C-shell:
`setenv TERM ...') to specify the correct type.  It may be necessary
to do `unset TERMINFO' (C-shell: `unsetenv TERMINFO') as well.svn: system('emacs -nw svn-prop.tmp') returned 256

(이것은 VISUAL 그냥으로 설정 emacs, 그러나 터미널 세션 내부가 아닌 Emacs X 창 내부에서만 가능합니다.)

여기에서 올바른 작업을 수행하고 명령줄 프로세스를 대신하여 새 버퍼를 열 수 있는 셸 모드를 얻을 수 있는 방법이 있습니까?

도움이 되었습니까?

해결책

다음을 통해 Emacs 세션에 연결할 수 있습니다. emacsclient.먼저 emacs 서버를 시작하십시오.

M-x server-start

또는 추가 (server-start) 너의 ~에게 .emacs.그 다음에,

export VISUAL=emacsclient

멀리 편집하세요.

메모:

  • 버전 emacs 그리고 emacsclient 동의해야 합니다.여러 버전의 Emacs가 설치되어 있는 경우 다음 버전을 호출해야 합니다. emacsclient 서버를 실행하는 Emacs 버전에 해당합니다.
  • 여러 Emacs 프로세스/프레임에서 서버를 시작하는 경우(예: (server-start) 당신의 .emacs), 서버를 시작하기 위한 마지막 프레임에 버퍼가 생성됩니다.

다른 팁

여기에는 emacsclient, gnuserv 및 Emacs 23의 multi-tty가 모두 유용합니다.실제로 Emacs 23에서는 emacsclient가 gnuserv의 흥미로운 기능을 모두 갖고 있다고 생각합니다.

전적으로 사실이 아닙니다. ansi-term emacs를 잘 실행할 수 있습니다. (보통 커밋 로그를 위해 mg을 실행하지만 드문 경우지만 emacs에서 직접 커밋하지 않습니다.) eshell 시작하면 emacs를 실행할 수도 있습니다. screen 먼저 거기에서 실행하십시오.

Emacs 클라이언트/서버를 사용하는 것과 함께 이 스크립트를 사용하여 Emacs를 호출합니다.

아직 실행되지 않은 경우 emacs가 시작되거나 실행 중인 emacs에서 새 emacs 버퍼가 열립니다(gnuclient 사용).기본적으로 백그라운드에서 실행되지만 일부 입력이 필요한 프로세스의 경우 포그라운드에서 실행될 수도 있습니다.예를 들어, 변경 목록 설명을 입력할 때 이것을 소스 제어 편집기로 사용하고 있습니다."SVN_EDITOR=emacs sync"가 있으므로 emacs 쉘에서 "svn commit"을 수행할 수 있으며 동일한 emacs의 새 emacs 버퍼에서 svn 편집기가 열립니다.버퍼를 닫으면 "svn commit"이 계속됩니다.꽤 유용합니다.

#!/bin/sh

if [ -z $EMACS_CMD ]; then
  EMACS_CMD="/usr/bin/emacs"
fi

if [ -z $GNUCLIENT_CMD ]; then
  GNUCLIENT_CMD="/usr/bin/gnuclient"
fi

if [ "$1" = "sync" ]; then
    shift 1
    sync=true
else
    sync=false
fi

cmd="${EMACS_CMD} $*"
lsof $EMACS_CMD | grep $USER >/dev/null 2>&1
if [ "$?" -ne "1" ]; then
    cmd="${GNUCLIENT_CMD} $*"
fi

if [ $sync = "true" ]; then
    $cmd
else
    $cmd &
fi

나는 수은을 통해 emacs 셸을 병합하기 위해 비슷한 작업을 수행하고 싶었습니다.여기 포스터 덕분에 길을 찾았어요.두 단계:

  1. 추가하다:(start-server) .emacs 파일(변경 후 파일 로드를 기억하세요)

  2. 귀하의 hgrc에서:

    [merge-tools]
    emacs.executable = emacsclient
    emacs.premerge = False
    emacs.args = --eval "(ediff-merge-with-ancestor \"$local\" \"$other\" \"$base\" nil \"$output\")"
    

내 .emacs에 (start-server)가 있으면 이 오류가 발생합니다....

Debugger entered--Lisp error: (void-function start-server)
  (start-server)
  eval-buffer(#<buffer  *load*> nil "/Users/jarrold/.emacs" nil t)  ; Reading at buffer position 22768
  load-with-code-conversion("/Users/jarrold/.emacs" "/Users/jarrold/.emacs" t t)
  load("~/.emacs" t t)
  #[nil "^H\205\276^@   \306=\203^Q^@\307^H\310Q\202A^@ \311=\2033^@\312\307\313\314#\203#^@\315\202A^@\312\307\$
  command-line()
  normal-top-level()

....GNU Emacs 22.1.1을 사용하고 있습니다.

제가 사용하고 있는 Mac OS-X 버전은 다음과 같습니다.

shandemo 511 $ uname -a Darwin Facilitys-MacBook-Pro.local 10.8.0

다윈 커널 버전 10.8.0:6월 7일 화요일 16:33:36 PDT 2011;

루트:xnu-1504.15.3~1/RELEASE_I386 i386

m-x ansi-term을 사용하면 쉘 내부에서 hg 커밋을 성공적으로 수행할 수 있는 것으로 보입니다.그러나 해당 쉘에서는 예를 들어 버퍼를 스크롤할 수 없습니다.c-p 또는 c-n이므로 m-x 쉘을 선호합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top