2009-08-21 13 views
6

estoy preguntando lo que la gente que usa para capitalizar correctamente cadenas inglés desde '' capitalizar '' no va a hacer el trabajo:cómo capitalizar cadena de Inglés en Emacs

(capitalize "can't") 
=> "Can'T" 

Aunque escribir esta función es trivial, me Me pregunto si hay una forma incorporada preferida para hacerlo.

Respuesta

8

Tal vez si se agrega temporalmente ' a la tabla de sintaxis constituyente palabra actual:

(modify-syntax-entry ?' "w") 

(capitalize "can't") 
=> "Can't" 
+2

1, una advertencia con esto, sin embargo: (capitalizar "se trata de una 'prueba'") "Esta es una 'prueba'" – cobbal

5

Tengo M-c obligado a sacar provecho de palabras, y funciona para capitalizar can't correctamente.

+0

capitalizar palabra funciona porque se ve "no puede" como dos palabras, puede y t. Esta es la razón por la cual originalmente dichas cadenas en lugar de palabras. Con mayúsculas y minúsculas tendré que recorrer todas las palabras de la cadena y terminaría capitilizando las "t" s. –

+1

No, eso no está bien. capitalize-word ve no puede ser una sola palabra. No capitaliza la t. Pero es una función interactiva que pone en mayúscula la siguiente palabra (o N awords) en el búfer en uso. No es una función que se aplica a la cadena pasada. Entonces, de todos modos, no funcionaría para ti. – Cheeso

+0

Pensé lo mismo, pero si ejecuta 'M-2 M-x capitalize-word' en" can not "obtendrá" Can not ". Por lo tanto, ve "no puedo" como dos palabras. – seth

1

Las respuestas actuales están bien, pero si trabajas con cadenas en el código, puedes usar s biblioteca de manipulación de cadenas. s-capitalize escribe en mayúscula la primera palabra de una oración.

ELISP> (s-capitalize "can't win the war on drugs in a prison, where the hell you gonna win it?") 
"Can't win the war on drugs in a prison, where the hell you gonna win it?" 
ELISP> (s-join " " (-map 's-capitalize (s-split " " "can't win the war on drugs in a prison, where the hell you gonna win it?"))) 
"Can't Win The War On Drugs In A Prison, Where The Hell You Gonna Win It?" 

s-titleize capitaliza cada palabra de una cadena, pero es un simple envoltorio alrededor de una función de capitalize, por lo tanto, se aplica Karl Voigtland's workaround.

ELISP> (s-titleize "Girl, you can't even think of calling this shit a war.") 
"Girl, You Can'T Even Think Of Calling This Shit A War." 
ELISP> (progn (modify-syntax-entry ?' "w") (s-titleize "Girl, you can't even think of calling this shit a war.")) 
"Girl, You Can't Even Think Of Calling This Shit A War." 
1

El comportamiento depende, por supuesto, de la tabla de sintaxis en uso, es decir, depende del modo principal. Si el carácter ' tiene la sintaxis "w p", entonces debería funcionar correctamente. Este es el caso en modo texto, pero no en la mayoría de los modos de programación.

Cuestiones relacionadas