2009-11-21 34 views
26

Tôi là người dùng vim và gần đây đã thử các emacs để giải trí. Tôi thấy rằng tính năng mà tôi đang thiếu nhất từ ​​trước đến nay là từ "super star" (tìm từ bên dưới con trỏ bằng cách nhập *), và tôi chưa tìm thấy tương đương trong các emacs. Nếu nó không được xây dựng, tôi cần phải thêm gì vào tập tin emacs của tôi để có được một cái gì đó tương tự?"siêu sao" hoặc tìm từ tương đương với con trỏ trong emacs

+1

tôi không biết điều đó trong VIM. Cool :) –

+3

bản sao có thể có của http://stackoverflow.com/questions/589691/how-can-i-emulate-vims-search-in-gnu-emacs –

+4

Tôi đồng ý rằng đó là bản sao, nhưng sẽ dễ dàng hơn khi tìm kiếm vim người dùng biết lệnh như siêu sao. Câu trả lời khác không bao giờ đề cập đến từ 'ngôi sao' khiến tôi khó tìm được. – mmrobins

Trả lời

27

Như pointed out bởi paldepind, isearch-forward-symbol-at-point (. Ms, theo mặc định) là một tương đương gần * trong Vim. Chức năng này có sẵn bắt đầu từ GNU Emacs 24.4; nếu Emacs của bạn là khác nhau hoặc cũ hơn, đọc trên cho các lựa chọn thay thế.

Thông thường tôi chỉ làm (M-b ...) C-sC-w ... C-s. Đó là:

  1. Mb để di chuyển đến đầu từ (s) quan tâm
    • zero hoặc nhiều các
  2. Cs để bắt đầu một I-Tìm kiếm
  3. Cw để giật (các) từ bắt đầu tại điểm
    • một hoặc nhiều trong số này
  4. Cs để tìm các trận đấu tiếp theo
  5. hơn Cs để tìm thấy sau đó phù hợp với
  6. RET để thoát khỏi I-tìm kiếm ở trận đấu gần đây nhất
    • hoặc một bó Cg để hủy bỏ quay lại origina l vị trí

Dưới đây là khởi đầu một đi vào tích hợp nó vào I-tìm kiếm (gọi thông qua C-sC-r; sử dụng C-h kC-s để biết thông tin trên isearch).

(require "thingatpt") 
(require "isearch") 
(define-key isearch-mode-map (kbd "C-*") 
    (lambda() 
    "Reset current isearch to a word-mode search of the word under point." 
    (interactive) 
    (setq isearch-word t 
      isearch-string "" 
      isearch-message "") 
    (isearch-yank-string (word-at-point)))) 

Lồng ghép nó vào I-Tìm kiếm lợi dụng cài đặt độ nhạy phù hợp với lời nói và trường hợp của nó (C-sM-cC- * sẽ thực hiện tìm kiếm case-sensitive vào từ dưới điểm).

+0

Bất kỳ cách nào để đưa tất cả sự kết hợp đàn piano này vào một số phím bấm đơn giống như trong vim? – Dfr

+3

Điều gì về việc sử dụng 'isearch-forward-symbol-at-point' mà theo mặc định được gắn với' C-s. ' – paldepind

+0

@paldepind: Điều đó có vẻ đẹp; TIN TỨC chỉ ra rằng nó bắt nguồn từ GNU Emacs 24.4 (tháng 10 năm 2014). –

10

Dưới đây là một khởi đầu:

 
(global-set-key (kbd "C-*") 
    (lambda() 
    (interactive) 
    (re-search-forward (format "\\b%s\\b" (thing-at-point 'word))))) 
16

Hãy thử CsCw

+10

Đây là câu trả lời sai. Nó giả định điểm là lúc bắt đầu của từ trong khi * siêu sao * tính năng trong Vim có thể được sử dụng từ bất cứ nơi nào trong từ. –

4

nếu bạn đang sử dụng viper (mà các công trình lớn) này nên làm việc đủ tương tự:

(require 'thingatpt) 
(require 'viper) 

(defun viper-search-word-at-point() 
    "Reset viper-s-string to word at point and start a forward viper search." 
    (interactive) 
    (setq viper-s-string (word-at-point)) 
    (viper-search viper-s-string 't nil)) 

(global-set-key (kbd "C-*") 'viper-search-word-at-point) 
4

Những ngày này cũng có Smart Scan, một add-on nhẹ gói cung cấp chức năng này.

Có sẵn từ MELPA; hướng dẫn thêm MELPA vào danh sách được bật package-archiveshere.

Để cài đặt nó:

Mxpackage-installRETsmartscanRET

Bạn có thể sau đó kích hoạt nó thông qua

(global-smartscan-mode t) ;; Turn on Smart Scan globally 

Các tổ hợp phím mặc định để tìm kiếm về phía trước và lạc hậu được MnM-p, tương ứng.


PS: Nếu bạn quan tâm, bài đăng blog gốc giới thiệu gói này là here.

Các vấn đề liên quan