2009-11-21 3 views
26

Sono un utente vim e recentemente ho provato Emacs per divertimento. Trovo che la funzione che mi manca più così tanto da vim sia "super star" (trova la parola sotto il cursore digitando *), e devo ancora trovare l'equivalente in emacs. Se non è integrato, cosa dovrei aggiungere al mio file emacs per ottenere qualcosa di simile?"super star" o trova la parola sotto il cursore equivalente in emacs

+1

non lo sapevo in VIM. Cool :) –

+3

possibile duplicato di http://stackoverflow.com/questions/589691/how-can-i-emulate-vims-search-in-gnu-emacs –

+4

Sono d'accordo è un duplicato, ma è più facile da trovare per un utente vim che conosce il comando come super star. L'altra risposta non menziona mai la parola "stella" che ha reso difficile per me trovare. – mmrobins

risposta

27

Come pointed out da paldepind, isearch-forward-symbol-at-point (. Ms, per impostazione predefinita) è uno stretto equivalente a * in Vim. Questa funzione è disponibile a partire da GNU Emacs 24.4; se il tuo Emacs è diverso o più vecchio, continua a leggere per le alternative.

Di solito io faccio solo (M-b ...) C-sC-w ... C-s. Cioè:

  1. Mb per spostarsi all'inizio della parola (s) di interesse
    • zero o più di questi
  2. Cs per avviare un I-Search
  3. Cw to yank the word (s) a partire dal punto
    • uno o più di questi
  4. Cs per trovare la corrispondenza successiva
  5. più Cs per trovare poi partite
  6. RET per uscire dalla I-ricerca nella parte più recenti match
    • o un gruppo di Cg per tornare all'origine l di partenza posizione

Ecco un andare a integrandolo in I-Search (richiamato tramite C-s e C-r; utilizzare C-h kC-s per informazioni su 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)))) 

integrandolo in I-ricerca trae vantaggio dalla sua impostazioni di sensibilità parola corrispondente e casi (C-sM-cC- * sarebbe fare una ricerca tra maiuscole e minuscole sulla parola di cui al punto).

+0

Un modo per mettere tutta questa combinazione di pianoforte in una singola pressione di un tasto più come in vim? – Dfr

+3

Per quanto riguarda l'utilizzo di 'isearch-forward-symbol-at-point' che per impostazione predefinita è associato a' C-s .' – paldepind

+0

@paldepind: Sembra bello; NEWS indica che ha avuto origine in GNU Emacs 24.4 (ottobre 2014). –

10

Qui è un inizio:

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

Prova CsCw

+10

Questa è una risposta errata. Presuppone che il punto sia all'inizio della parola mentre * la funzione super star * di Vim può essere utilizzata da qualsiasi parte all'interno della parola. –

4

se si sta utilizzando Viper (che funziona alla grande) questo dovrebbe funzionare abbastanza simile:

(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

In questi giorni c'è anche Smart Scan, un pacchetto aggiuntivo leggero che fornisce questa funzionalità.

È disponibile da MELPA; le istruzioni per aggiungere MELPA all'elenco di package-archives abilitato sono here.

Per installarlo:

Mxpackage-installRETsmartscanRET

È quindi possibile attivarlo tramite

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

Le associazioni dei tasti di default per la ricerca in avanti e indietro sono Mn e M-p, rispettivamente.


PS: Se siete interessati, il post sul blog originale introduzione di questo pacchetto è here.