Làm thế nào để tôi thoát khỏi chuỗi mặc định của LINE (sử dụng lần cuối) trong một số hàm emacs?


12

Tôi có một vấn đề sau: khi tôi sử dụng 'Cx rt' (chuỗi hình chữ nhật), tôi được nhắc nhập một số chuỗi, để thay thế hình chữ nhật đã chọn. Hãy nói rằng tôi gõ ";;" (để bình luận ra hình chữ nhật). Điều này chỉ hoạt động tốt, nhưng lần sau tôi gọi hàm tương tự và tôi muốn thay thế bằng không có gì (chuỗi trống), tôi không thể làm điều đó, vì có "chuỗi" mặc định ";;" mà tôi đã sử dụng trước đó và nếu tôi nhấn enter, lệnh sẽ sử dụng ";;" chuỗi thay vì một chuỗi trống. Làm thế nào để tôi đặt nó vào chuỗi rỗng?

Vấn đề tương tự tôi đã có với một số chức năng tìm kiếm / thay thế. Về cơ bản, khi nó nhớ chuỗi cuối cùng tôi đã sử dụng và đặt nó thành mặc định, làm thế nào để tôi "nhập" chuỗi trống thay thế?

BIÊN TẬP :

Kill-hình chữ nhật, được đề cập bởi YoungFrog giải quyết vấn đề cụ thể, nhưng tôi có một điều khác trong tâm trí: về cơ bản, trong mọi chức năng, emacs đều nhớ giá trị cuối cùng bạn đã nhập và sử dụng nó làm "mặc định" khi bạn vừa nhấn enter, bạn nên có thể xóa "mặc định" thành bất cứ thứ gì là mặc định thực trước khi bạn sử dụng chức năng này lần đầu tiên. Đây là một ví dụ khác:

Trong chế độ chuyển hướng, nếu bạn 'Mx rgrep', nó sẽ hỏi bạn 3 đầu vào:

1) Tìm kiếm gì: bất cứ thứ gì bạn nhập vào đây, sẽ được sử dụng làm mặc định vào lần tới khi bạn sử dụng rgrep. Như ai đó đã chỉ ra, thật vô nghĩa khi tìm kiếm chuỗi rỗng, vì vậy việc xóa giá trị "mặc định" này thực sự không bao giờ cần thiết tôi đoán.

2) Tiếp theo nó sẽ hỏi những tập tin cần tìm. Nó thực sự mặc định là tập tin "tất cả". Nếu tôi nhập * .txt và tìm kiếm, lần sau khi tôi sử dụng rgrep, * .txt sẽ được sử dụng làm "mặc định". Bây giờ tôi muốn xóa "mặc định" * .txt này và trở về mặc định ban đầu, "tất cả", giống như tôi muốn xóa ";;" "mặc định" trong hàm chuỗi hình chữ nhật thành chuỗi mặc định thực, chuỗi rỗng.

Tất nhiên, vấn đề cụ thể này cho tất cả các tệp có thể được giải quyết bằng cách gõ *? Nhưng tiềm năng vấn đề chung này vẫn còn với các lệnh khác nhớ giá trị được sử dụng cuối cùng.

3) Nó sẽ tiếp theo yêu cầu thư mục cơ sở, không có vấn đề ở đây.

Vì vậy, theo cách tôi nhìn thấy, bất cứ khi nào emacs cố gắng giúp tôi bằng cách nhớ giá trị được sử dụng cuối cùng của tôi trong một số lệnh (mà tôi thấy rất hữu ích trong hầu hết thời gian), nên có một cách để xóa giá trị được sử dụng đó như thể tôi chưa bao giờ sử dụng lệnh trước.

PS Tôi vẫn chưa quen với emacs, và có lẽ chức năng tôi yêu cầu là không cần thiết, vì luôn có một số cách giải quyết?


1
Tôi tin rằng điều đó thật khó khăn, bởi vì việc đọc và trao đổi giá trị mặc định cho chuỗi trống không xảy ra trong cùng một hàm trong hầu hết các trường hợp. Trong trường hợp cụ thể này delete-rectanglelà một lựa chọn.
trị

Nếu bạn định chèn khoảng trắng vào hình chữ nhật đã chọn, bạn có thể sử dụng clear rectangle.
Kaushal Modi

Nếu bạn chỉ đơn giản muốn chặn bình luận / uncomment, tại sao không sử dụng comment-dwim? Ngoài ra, nhập chuỗi "trống" cho tìm kiếm sẽ không có ý nghĩa, nhưng bạn có thể nhập chuỗi trống cho phần thay thế. Tôi tò mò muốn xem thêm các ví dụ về việc người dùng có thể cần nhập một chuỗi trống.
Kaushal Modi

3
Chỉ cần nhìn vào mô tả của bạn một cách nhanh chóng, nhưng có vẻ như có thể có vấn đề với việc thiết kế lệnh string-rectangle. Bất cứ khi nào một chuỗi rỗng có ý nghĩa như là một đầu vào có thể, nên có một cách để nhập nó, như phân biệt với việc chấp nhận một giá trị mặc định. Nhìn kỹ vào tài liệu cho lệnh (và mã nguồn của nó, nếu bạn cảm thấy thoải mái với điều đó), để xem trên thực tế có một lỗ hổng thiết kế nào ở đây không. Nếu bạn nghĩ là có, xin vui lòng báo cáo nó : M-x report-emacs-bug.
vẽ

Đối với 2), bạn có thể nhập theo nghĩa đen all, hơi khác so với *: nó cũng khớp .*.
npostavs

Câu trả lời:


3

Đừng sử dụng C-x r t( string-rectangle), sử dụng C-x r k( kill-rectangle) thay vào đó.


1
Tôi chỉ trả lời ví dụ cụ thể được đưa ra bởi vì IMO trường hợp chung (câu hỏi trong tiêu đề) không thừa nhận câu trả lời (chung). Tuy nhiên, tôi muốn đề cập rằng C-j(thay vì RET) có thể giúp ích trong một số trường hợp, ví dụ như chế độ ido.
YoungFrog

3

Trong trường hợp chung, những gì bạn muốn không thể đạt được. Điều này là do một số tiện ích và chế độ trong Emacs lưu trữ lịch sử hoàn thành đọc của chúng trong các biến khác nhau, không phải ở một vị trí. Bạn có thể tự đặt các biến lịch sử đó thành nil( C-x r tví dụ của bạn (setq string-rectangle-history nil)), nhưng nó không mở rộng. Cũng không dễ để khám phá tên của các biến lịch sử mà không cần đọc mã.

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.