Có thể để cho Emacs có con trỏ được di chuyển ngoài màn hình, giống như hầu hết các trình soạn thảo văn bản GUI hoạt động không? Đây là một trong những điều lớn nhất làm phiền tôi khi tôi sử dụng Emacs trên bất kỳ trình soạn thảo GUI nào. Khi tôi cuộn xuống, con trỏ sẽ được "đẩy về phía trước" ở đầu bộ đệm. Trước đây tôi đã nghĩ rằng điều này là hoàn toàn không thể, bởi vì điều này là khó có dây vào kiến trúc của Emacs, nhưng sau đó tôi thấy multiple-cursors, mà thực hiện chính xác điều này cho con trỏ thứ cấp (giả sử bạn ngăn chặn các chức năng cuộn từ hành động trên các con trỏ thứ cấp). Có thể sử dụng nhiều con trỏ để có con trỏ chính trong một số bộ đệm ẩn và con trỏ hiệu quả là con trỏ thực sự tôi chỉnh sửa không? Hoặc có thể một số thủ thuật thông minh khác? Hoặc có lẽ Googling của tôi đã thất bại và điều này thực sự là có thể nếu không có ma thuật?Cho phép Emacs di chuyển con trỏ ra khỏi màn hình
Trả lời
Nói đúng, bạn không thể di chuyển con trỏ ra khỏi màn hình, bởi vì mã C cơ bản sẽ không cho phép bạn thực hiện điều đó.
Điều này cho biết, tôi nghi ngờ rằng sự cố của bạn có thể được khắc phục. Về cơ bản, có 2 khía cạnh:
- bạn không thích cách mọi thứ trông khi "con trỏ bị đẩy về phía trước". Bạn có thể làm việc xung quanh bằng cách (tạm thời) làm cho con trỏ vô hình.
- bạn muốn "nhảy lùi" về vị trí cuộn trước ngay sau khi bạn đưa ra lệnh không cuộn. Có lẽ một số gói phần mềm ra khỏi đó mà nó cho bạn, nhưng bạn có thể làm điều đó cho mình với một số hack
pre-command-hook
.
BTW, tôi hoan nghênh các bản vá lỗi trong Emacs cung cấp một số chức năng đó. Tôi ghét hành vi "tự động nhảy ngược" của các trình chỉnh sửa khác, nhưng sẽ rất tốt khi ghi lại vị trí "cuộn trước" và sau đó đưa ra cách để quay lại.
Có. cho tôi chính xác những gì tôi muốn. – asmeurer
Có cách nào để móc vào các chức năng di chuyển con trỏ khi di chuyển không? Cụ thể, có móc nào có thể thông báo cho tôi * trước đó không * vị trí của 'điểm' được sửa đổi bởi lệnh cuộn? Ngoài ra, trong đó các tệp C từ nguồn Emacs tôi có thể tìm mã xác định hành vi này không? – nispio
@nispio: Tôi không nghĩ rằng có một cái móc nào được nêu ra. IIRC vào thời điểm Emacs quyết định rằng điểm cần được di chuyển để ở lại trên màn hình, chúng tôi không thể dễ dàng chạy mã Elisp, nhưng chúng tôi có thể có thể stash vị trí của điểm nào đó. Bạn có thể 'M-x report-emacs-bug' yêu cầu một tính năng như vậy không? – Stefan
Đánh giá theo ngữ cảnh và mô tả sự cố của bạn, có vẻ như bạn muốn duyệt bộ đệm trong khi vẫn giữ vị trí chỉnh sửa của mình. Có ít nhất hai thủ thuật cho mục đích đó: đánh dấu/đăng ký và chia nhỏ trong hai cửa sổ.
https://stackoverflow.com/a/3777598/308668 mô tả thanh ghi của Emacs hoạt động giống như dấu của Vim. Bạn có thể kiểm tra vị trí của mình trong tệp bằng cách bấm phím C-x r SPC a
(a
là thư bạn chọn) và bạn luôn có thể quay lại với C-x r j a
.
Một số loại tự động hóa được thực hiện bởi tập lệnh bên ngoài (goto-last-change.el
), được mô tả tại đây: https://superuser.com/a/184402/49046.
Cách khác, chia cửa sổ thành hai với C-x 2
. Các cửa sổ mới được chia đều hiển thị cùng một vị trí và bạn có thể sử dụng vị trí kia để khám phá. C-x 0
đóng cửa sổ khi bạn hoàn tất.
'goto-last-change' có vẻ như là một công việc hợp lý. – asmeurer
Có một gói mới có sẵn trên GNU ELPA được gọi là scroll-restore
nhằm khắc phục sự cố này. Cho đến nay, tôi đã gặp phải một vài lỗi, nhưng các gói phần mềm dường như làm việc như quảng cáo cho hầu hết các phần.
Bạn có thể kiểm tra nó ra bằng cách cài đặt nó với
M-x package-install RET scroll-restore RET
Sau khi gói được cài đặt, bạn có thể bật chế độ nhỏ với
M-x scroll-restore-mode
Cá nhân, tôi đang ràng buộc nó vào Scroll Khóa bởi vì nó có vẻ như vô cùng tuyệt vời! Đây là những gì tôi đang thêm vào tập tin init của tôi:
(require 'scroll-restore)
(scroll-restore-mode 1)
;; Allow scroll-restore to modify the cursor face
(setq scroll-restore-handle-cursor t)
;; Make the cursor invisible while POINT is off-screen
(setq scroll-restore-cursor-type nil)
;; Jump back to the original cursor position after scrolling
(setq scroll-restore-jump-back t)
;; Toggle scroll-restore-mode with the Scroll Lock key
(global-set-key (kbd "<Scroll_Lock>") 'scroll-restore-mode)
Đây là một bản sao trực tiếp của một câu trả lời được đăng ở đây: https://emacs.stackexchange.com/a/2273/93
Điều này có yêu cầu 24.4 không? Nó không xuất hiện trong danh sách khi tôi đang sử dụng 24.3. – asmeurer
Tôi đang chạy nó trên 24.3. Gói này vừa được phát hành lần đầu tiên vào ngày 2014-10-16, vì vậy bạn sẽ phải đảm bảo làm mới danh sách gói của mình. Tôi không biết ELPA hoạt động như thế nào, nhưng nếu nó sử dụng gương thì có thể là gói đó chưa đạt tới tất cả gương. Bạn cũng có thể tải xuống ['scroll-restore.el'] (http://elpa.gnu.org/packages/scroll-restore-1.0.el) từ trang web GNU ELPA và thêm nó vào trang web-lisp của bạn. – nispio
con trỏ của tôi không quay lại hiển thị. Bất kỳ đề xuất? –
Có lẽ không. Đây là gần nhất tôi có thể khuyên bạn nên: http://superuser.com/questions/184340/emacs-how-to-return-to-last-position-after-scroll-page-up-down – Dmitry
Lưu ý rằng bạn luôn có thể đi trở lại ** vị trí con trỏ ** trước đó với 'Cu C-space' (tức là cuộn đến bất cứ nơi nào bạn cần cuộn và quay lại bất cứ nơi nào bạn đang sử dụng lệnh này) –