Làm cách nào để sử dụng emacsclient làm EDITOR hoặc VISUAL?


10

Kịch bản: Tôi đang ở zsh và tôi muốn chỉnh sửa một lệnh shell dài trong một phiên bản đã mở của Emacs. Tôi đã thiết lập $VISUALđể emacsclient -n -c. Khi tôi chạy C-x C-etừ zsh, một khung Emacs mới mở ra, được điền với nội dung của dòng zsh. Sau khi chỉnh sửa và lưu bộ đệm, tôi nhấn C-x kvà đóng bộ đệm. Dòng zsh vẫn không thay đổi . Tại sao zsh không nhận ra những thay đổi được thực hiện trong Emacs?

Emacs 24.5.1, zsh 5.0.8, Mac OS X 10.10.4

Câu trả lời:


11

Đặt VISUALthành emacsclient -c(hoặc một số biến thể khác mà không có -n).

Tùy chọn này -nsẽ emacsclientquay trở lại ngay khi liên hệ với phiên bản Emacs đang chạy để yêu cầu nó chỉnh sửa tệp. Chương trình gọi trình soạn thảo (ở đây, zsh, nhưng điều này áp dụng như nhau cho bất kỳ chương trình nào khác gọi $VISUAL) biết rằng bạn đã chỉnh sửa xong vì chương trình mà nó gọi đã thoát, -nvề cơ bản, xảy ra ngay lập tức.

Bạn cần sắp xếp cho chương trình được gọi VISUALđể thoát khi bạn chỉnh sửa xong, tức là khi bạn đóng bộ đệm trong Emacs. Đó chính xác là những gì emacsclientkhông cần -n: nó liên hệ với cá thể Emacs đang chạy để bảo nó mở tệp, sau đó ngồi xung quanh cho đến khi Emacs trả lời để nói với emacsclient rằng phiên chỉnh sửa kết thúc. Cách thông thường để kết thúc một phiên chỉnh sửa là nhấn C-x #( server-edit). Điều này thông báo cho emacsclient và đóng bộ đệm, cũng như khung khi nó được mở bằng emacsclient -c. Đóng bộ đệm cũng thông báo quá trình emacsclient rằng phiên kết thúc, nhưng bạn nhận được một cảnh báo nhắc ( “Buffer ... vẫn có khách hàng, giết nó?”), Mà bạn có thể vô hiệu hóa bằng cách ghi đè các chức năng server-kill-buffer-query-function(RMS nghĩ đó là nguy hiểm). Trong một khung được mở bởiemacsclient -c, nhấn C-x C-c( save-buffers-kill-terminal) lưu tệp, đóng tệp và đóng khung.


-ncũng sẽ ngăn emacsclient làm việc như một trình soạn thảo cho git.
cg433n

Một tiếp tuyến (và tôi sẽ đặt nó trong một câu hỏi khác nếu bạn muốn), nhưng -ncờ có công dụng gì?
Mực

3
@MrBones Nói tôi đang ở trong trình quản lý tệp hoặc trên dòng lệnh và tôi muốn chỉnh sửa tệp. Không phải chỉnh sửa một tập tin và sau đó làm một cái gì đó với nó, chỉ cần bắt đầu chỉnh sửa nó. Nếu tôi chạy một phiên bản Emacs riêng cho mỗi tệp, tôi sẽ chạy emacs myfile &(hoặc tương đương với Windows), đưa quy trình Emacs vào vùng nước lợ. Với emacsclient, tôi có thể chạy emacsclient myfile &, nhưng điều đó để lại một emacsclientquá trình mà công việc duy nhất của nó là chờ đợi, sau đó thoát ra. Thay vào đó tôi chạy emacsclient -n myfile, vì vậy quá trình emacsclient tự biến mất. Điều này rất phổ biến Tôi có một bí danh vỏ cho nó:alias e='emacsclient -n'
Gilles 'SO- ngừng trở thành ác quỷ'

@Gilles Tôi nhận ra rằng tôi chỉ chạy emacsclienttrong thiết bị đầu cuối, đó là lý do tại sao tôi không thể nhìn thấy điểm của -n. Cảm ơn
Squidly

2
@MrBones, tôi sẽ nói rằng việc chạy emacsclient trong một thiết bị đầu cuối là lý do chính xác cho việc sử dụng -n: sau khi mở gửi tệp đến khung Emacs đang mở, emacsclient chấm dứt và người ta có thể tiếp tục làm việc trong thiết bị đầu cuối. Điều này là đặc biệt tiện dụng.
Daniel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.