2011-09-08 26 views
6

1) En mi proceso de ajuste de mi editor GUI a EMACS parece que tengo problemas para encontrar una forma clara de hacer una tarea relativamente simple para la mayoría de los editores: Buscar y reemplace palabras enteras (no subseries) dentro de un texto y encuentre coincidencias exactas. M-x replace-string encuentra subcadenas así como palabras completas. ¿Hay una expresión regular que hace esto?Buscar y reemplazar palabras completas (no subcadenas) en Emacs

2) Además, ¿hay alguna manera de hacer coincidir las cadenas exactas? Por ejemplo, si quisiera reemplazar myClaSs con el caso exacto de cada letra, ¿qué tendría que hacer? En este momento, la cadena de reemplazo coincide con myclass con myCLasS. Como entiendo, solo las primeras letras en el caso coinciden. Supongo que algunos regexp se encargan de esto también.

3) ¿Existe una opción para realizar una búsqueda general? O voy siempre tiene que decidir si hago C-s (hacia adelante) o C-R (hacia atrás)

Respuesta

7

Uso palabra anclas de contorno: \bfoo\b única partidos foo, no foobar.

Entonces, las expresiones regulares generalmente distinguen entre mayúsculas y minúsculas. En la mayoría de los sabores, puede explícitamente distinguir entre mayúsculas y minúsculas anteponiendo (?I) o (?-i) a su expresión regular. Pero no estoy seguro de si las expresiones regulares de Emacs pueden hacer eso.

No tengo idea acerca de su tercera pregunta. Lo siento.

+0

'M- <' ejecuta 'beginning-of-buffer' – ceving

+1

Además,' beginning-of-buffer' empuja el punto al anillo de marca local, al igual que los comandos de búsqueda/reemplazo.Por lo tanto, después de que haya terminado de reemplazar, puede usar 'C-u SPC' (que muestra el anillo de marca local) dos veces para regresar al punto de partida. – phils

1

En primer lugar, ¿puede por favor hacer preguntas múltiples en preguntas separadas en el futuro? Hace que sea más fácil para otros ayudarlo a usted y a otros usuarios que tienen algunas de las mismas preguntas en el futuro para obtener ayuda de respuestas anteriores.

respuesta
  1. Ver @ de Tim

  2. Ver C-h k M-% y lea la sección sobre el caso a juego

  3. Haciendo C-s después del último partido le pedirá que estás al final, golpeando C-snuevamente se envolverá desde el principio. Lea los documentos tocando C-h i y luego haga clic en * Emacs y luego en g Repeat Isearch RET, penúltimo párrafo.

+0

M-% funciona bien en conjunción con el "!" modificador para no detenerse en cada partido. Todavía estoy aprendiendo la sintaxis de emacs y me gustaría saber cómo puedo solicitar el prefijo/argumentos opcionales para los comandos. en este caso, el argumento DELIMITED de M-%. (Tercer arg DELIMITED (prefijo arg si es interactivo), si no es nulo, significa reemplazar solo coincide rodeado por límites de palabras.) – octi

+0

Eso suena como otra pregunta. :-) No estoy seguro de lo que estás preguntando aquí. Abre otra pregunta y elabora allí. –

+0

Bueno, la pregunta era cómo configurar DELIMITED a no-nil cuando se llama M-%. Aunque abrí otra pregunta. ¡Gracias por la ayuda! – octi

1

Para la pregunta 2, si la cadena de búsqueda es todo en minúsculas, emacs hace una búsqueda sensible a las mayúsculas por defecto. Puede obligarlo a realizar una búsqueda con distinción entre mayúsculas y minúsculas configurando case-fold-search en nil. Puede poner esto en su archivo .emacs: (setq case-fold-search nil).

6

Todas las otras respuestas proporcionan información que puede usar para que Emacs haga lo que desee. Pero también se puede rodar su propia búsqueda/reemplazar la función de hacer lo que quiere de este modo:

(defun search-replace-ala-octi (tosearch toreplace) 
    (interactive "sSearch for word: \nsReplace with: ") 
    (save-excursion 
    (goto-char (point-min)) 
    (let ((case-fold-search nil) 
      (count 0)) 
     (while (re-search-forward (concat "\\b" tosearch "\\b") nil t) 
     (setq count (1+ count)) 
     (replace-match toreplace 'fixedcase 'literal)) 
     (message "Replaced %s match(es)" count)))) 

y enlazarlo a la tecla que desea ...

+2

Cuanto más quiero aprender EMACS, más me doy cuenta de que tengo que aprender LISP. – octi

+0

@octi La mayor parte de hacer que Emacs haga lo que usted desea es solo aprender Emacs, que resulta ser un ceceo. El 95% de lo que la gente quiere es simplemente personalizar los ganchos/variables que ya existen. El otro 5% se puede encontrar preguntando aquí. –

1

En la pregunta 1 (toda búsqueda de palabras) \b en la respuesta de @Tim no puede funcionar al reunirse con el personaje _. Parece que foo\b puede coincidir con foo_bar en Emacs (por supuesto que no puede coincidir en Perl).

+1

Todo depende de la tabla de sintaxis del búfer (que está establecida por el modo principal en la mayoría de los casos). Si '_' no es un carácter de palabra constituyente en la tabla de sintaxis, entonces' \ b' puede coincidir con cualquiera de sus lados, como en su ejemplo. Tenga en cuenta que en las expresiones regulares de Emacs, puede hacer coincidir el principio o el final de un * símbolo * con '\ _ <' and '\_>' respectivamente ('_' es casi con certeza un componente del símbolo en el modo perl). – phils