Thu hẹp đến hạn chế trước đó


8

Có một cách thuận tiện để khôi phục các hạn chế trước đó? Vì vậy, sau chuỗi các sự kiện sau đây:

  • Đánh dấu một vùng
  • Gọi narrow-to-regionvà làm một số công việc.
  • Gọi widenđể nhảy xung quanh và tìm kiếm một cái gì đó

Tôi muốn thu hẹp lại khu vực ban đầu một lần nữa mà không phải đánh dấu lại.


Điều này là khó khăn vì tất nhiên nội dung của bộ đệm có thể thay đổi giữa lệnh gọi widenvà lệnh gọi đến một renarrowlệnh giả định . Có lẽ cách tiếp cận tốt nhất là lưu ranh giới của khu vực ở đâu đó và có lệnh đánh dấu khu vực được lưu cuối cùng.
glucas 18/03/2015

Câu trả lời:


2

Thay vì thu hẹp bộ đệm chính, bạn có thể mở Bộ đệm gián tiếp mới và thu hẹp:

(defun indirect-region (beg end name)
  "Open a new named indirect buffer of the current buffer,
narrowed to region [BEG, END]."
  (interactive "r\nsname of narrowed buffer: ")
  (let ((new-buff
         (make-indirect-buffer (current-buffer)
                               (generate-new-buffer-name name)
                               t)))
    (switch-to-buffer new-buff nil t)
    (narrow-to-region beg end)))

Điều này sẽ mở một bộ đệm gián tiếp mới của bộ đệm hiện tại của bạn được thu hẹp vào khu vực hiện tại của bạn, chỉnh sửa bộ đệm này giống như chỉnh sửa bộ đệm chính và bạn sẽ có thể chuyển đổi qua lại giữa chúng.

Thích như vậy:

nhập mô tả hình ảnh ở đây

Bạn có thể mở rộng về điều này với các tính năng hay như

  • tự động thu hẹp đến chức năng hiện tại
  • Đặt tên bộ đệm mới sau hàm hiện tại
  • một phím bấm để nhảy giữa bộ đệm gián tiếp của hàm và bộ đệm chính
  • không tạo bộ đệm gián tiếp mới cho các hàm đã mở

Đó là tất cả tùy thuộc vào bạn mặc dù.


Cảm ơn, đây có thể là con đường để đi. Tôi cũng có thể thấy điều ngược lại: từ một bộ đệm bị thu hẹp, tạo ra một bộ đệm gián tiếp mở rộng để tìm kiếm một cái gì đó.
glucas

7

Xin lỗi tôi đã không nhìn thấy câu hỏi của bạn sớm hơn.

Đây chính xác là một trong những lý do cho thư viện Zones ( zones.el).

Khi bạn thu hẹp bộ đệm, mỗi lần thu hẹp được thêm vào một vòng thu hẹp , bao gồm bộ đệm đầy đủ (không bị cắt). Các hẹp có thể được lồng nhau, nhưng chúng không cần. Họ có thể là bất kỳ khu vực nào cả.

Bạn có thể xoay vòng giữa các khoảng hẹp (sử dụng C-x n x x x...). Bạn có thể đi trực tiếp đến N thứ hẹp trước bằng cách sử dụng một số tiền tố arg; ví dụ C-3 C-x n x. Đồng bằng C-umở rộng hoàn toàn (giống như C-x n whoặc đạp xe đến lối vào vòng không được phép). C-0làm trống chiếc nhẫn.

Dòng chế độ cho bạn biết thu hẹp (hạn chế bộ đệm) là hiện tại.

Bạn thậm chí có thể lưu vòng hạn chế bộ đệm hiện tại liên tục và khôi phục nó sau. Nếu bạn sử dụng thư viện Bookmark + thì bạn có thể đánh dấu một vòng giới hạn và sau đó khôi phục nó sau đó bằng cách chuyển đến dấu trang.

Để biết thêm thông tin, xem Nhiều Thu hẹp .


Xem thêm Thu hẹp gián tiếp (thư viện narrow-indirect.el). Nó cho phép bạn dễ dàng tạo ra bất kỳ số lượng bộ đệm gián tiếp nào là bản sao của bộ đệm chính và được thu hẹp thành các phần cụ thể của nó.


@phils: Thx; làm xong. Trên thực tế, nó đã được đề cập trên trang Vùng , nhưng tôi cũng đã thêm nó vào trang Nhiều Thu hẹp .
vẽ
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.