Flujo de trabajo sublime para reemplazar citas -- replace campo con sublimetext3 campo con workflow campo con double-quotes camp Relacionados El problema

Sublime Workflow for replacing quotes


1
vote

problema

Español

Utilizo texto sublime texto 3 para editar el código, y muy a menudo tendré una cadena literal envuelta en comillas dobles, que quiero cambiar a comillas simples, o viceversa. En este momento, me desplazo hasta cada comilla, y reemplácelo con el que quiero. ¿Hay un flujo de trabajo más rápido para esto? ¿Decir, resaltar la palabra o una tecla de acceso rápido o algo así? Lo encontraría súper útil.

Original en ingles

I use text editor Sublime Text 3 to edit code, and very often I'll have a string literal wrapped in double quotes, that I want to change to single quotes, or vise versa. Right now I scroll to each quotation mark, and replace it with the one I want. Is there a faster workflow for this? Say, highlighting the word or a hotkey or something? I would find it super useful.

           
   
   

Lista de respuestas

6
 
vote
vote
La mejor respuesta
 

Si tiene un gran número de dichas cadenas en un archivo y desea convertirlas todas a la vez, podría usar una operación de búsqueda / reemplazo de regeo para encontrarlos y reemplazarlos a todos. Usaría Find > Replace... o Find > Find in files... para buscar un regex coincidente que captura el texto en las cotizaciones.

Por ejemplo, podría usar "([^" ]*)" como término de búsqueda y '1' como el texto de reemplazo para intercambiar todas las cadenas de doble cotización para comillas simples.

No se puede unir algo así a una clave directamente porque encontrar / reemplazar no se puede usar en una macro, pero podría usar el Regreplace paquete para hacer esto si desea ir esa ruta.

Posiblemente puede acelerar el flujo de trabajo que está utilizando actualmente aprovechando a varios cursores, si aún no lo está haciendo.

Podría, por ejemplo, seleccionar la primera cotización, luego presione CTRL + D o opción + D para seleccionar la otra. Ahora que tiene dos cursores, presione retroceso para eliminar ambas cotizaciones y presione el nuevo carácter de cotización para insertar los nuevos.

Esto no puede ser macro-ized y vinculado a una tecla porque el comando find_under_expand4 no se puede usar en una macro, sin embargo.

Para una solución de prensa clave completa, por lo que sé, necesitaría un complemento de algún tipo para hacerlo por usted. Un ejemplo de ese ejemplo parece ser changequotes , aunque nunca lo he usado personalmente.

También es posible escribir su propio complemento pequeño, como lo siguiente:

  import sublime import sublime_plugin   class SwapQuotesCommand(sublime_plugin.TextCommand):     pairs = ["'", '"']      def run(self, edit):         self.view.run_command("expand_selection", {"to": "scope"})         for sel in self.view.sel():             self.toggle(edit, sel)      def toggle(self, edit, region):         begin = self.view.substr(region.begin())         end = self.view.substr(region.end() - 1)          if begin == end and begin in self.pairs:             index = self.pairs.index(begin) + 1             new = self.pairs[index % len(self.pairs)]              for point in (region.begin(), region.end() - 1):                 self.view.replace(edit, sublime.Region(point, point+1), new)   

Esto amplía la selección en todos los cursores por el alcance de corriente, y luego, si ambos extremos de la selección son una cotización coincidente, la cotización en uso se cambia.

En uso, usaría un enlace clave, como lo siguiente, que incluye un contexto para hacer que la llave solo se active mientras el cursor está dentro de una cadena para que no arruine su selección en los casos en que definitivamente no funcionará

  {     "keys": ["ctrl+shift+'"], "command": "swap_quotes",     "context": [         { "key": "selector", "operator": "equal", "operand": "string.quoted", "match_all": true }     ] },   
 

If you have a large number of such strings in a file and you want to convert all of them at once, you could use a regex find/replace operation to find and replace them all. You would use Find > Replace... or Find > Find in files... to search for a matching regex that captures the text in the quotes.

For example you could use \"([^"\n]*)\" as a search term and '\1' as the replacement text to swap all double quoted strings for single quotes.

You can't bind something like that to a key directly because Find/Replace can't be used in a Macro, but you could use the RegReplace package to do this if you want to go that route.

You can potentially speed up the workflow that you're currently using by taking advantage of multiple cursors, if you're not already doing that.

You could for example select the first quote, then press Ctrl+D or Option+D to select the other one. Now that you have two cursors, press Backspace to delete both quotes and press the new quote character to insert the new ones.

This can't be macro-ized and bound to a key because the find_under_expand command can't be used in a macro, though.

For a full key press solution, as far as I'm aware you would need a plugin of some sort to do this for you. One such example appears to be ChangeQuotes, although I've never personally used it.

It's also possible to write your own small plugin such as the following:

import sublime import sublime_plugin   class SwapQuotesCommand(sublime_plugin.TextCommand):     pairs = ["'", '"']      def run(self, edit):         self.view.run_command("expand_selection", {"to": "scope"})         for sel in self.view.sel():             self.toggle(edit, sel)      def toggle(self, edit, region):         begin = self.view.substr(region.begin())         end = self.view.substr(region.end() - 1)          if begin == end and begin in self.pairs:             index = self.pairs.index(begin) + 1             new = self.pairs[index % len(self.pairs)]              for point in (region.begin(), region.end() - 1):                 self.view.replace(edit, sublime.Region(point, point+1), new) 

This expands the selection in all of the cursors out by the current scope, and then if both ends of the selection are a matching quote, the quote in use is swapped.

In use, you would use a key binding such as the following, which includes a context to make the key only trigger while the cursor is inside of a string so that it doesn't mess up your selection in cases where it definitely won't work.

{     "keys": ["ctrl+shift+'"], "command": "swap_quotes",     "context": [         { "key": "selector", "operator": "equal", "operand": "string.quoted", "match_all": true }     ] }, 
 
 

Relacionados problema

1  C Programación - Diferencia entre liberar un carácter ** lleno de cotizaciones simples y llenas de comillas dobles - Valgrind  ( C programming difference between freeing a char filled with simple quotes a ) 
Estoy tratando de probar la función libre con este programa char **tab; // allocation tab = malloc(5 * sizeof(char*)); for(int j=0 ; j<5 ; j++) ...

46  Omitir la cita doble para realizar consultas en PostgreSQL  ( Omitting the double quote to do query on postgresql ) 
Pregunta simple, ¿hay alguna forma de omitir la cita doble en PostgreSQL? Aquí hay un ejemplo, dando select * from A; , RETIRARÉ ERROR: relation "a" does...

0  JavaScript: encuentre citas dobles dentro de comillas dobles, ya sea al principio, medio o final  ( Javascript find double quotes within double quotes whether at the start middl ) 
luchando con este ... Mis datos de prueba son: const rawTextString = `"""In 1981, DuPont"" prepared charts and tables recording the C-8 concentration...

303  ¿Cuál es la diferencia entre la cadena.empty y "" (cadena vacía)?  ( What is the difference between string empty and empty string ) 
En .NET, ¿cuál es la diferencia entre String.Empty y "" , y son intercambiables, o hay algunos problemas de referencia o localización subyacentes en torno ...

65  ¿Cómo afecta el signo de dólar líder en las citas individuales en Bash?  ( How does the leading dollar sign affect single quotes in bash ) 
Necesito pasar una cadena a un programa como su argumento de la CLI de Bash, por ejemplo, por ejemplo program "don't do this" La cadena puede incluir cu...

0  ¿Cómo dividir la cadena contiene ambas citas dobles y escapar cotizaciones dobles en Java?  ( How to split string contains both double quotes and escape double quotes in java ) 
Digamos que tengo una cadena de entrada "Tim "Apple"" "Mark "FB"" "Elon "Cars"" Quiero dividir esa cadena en una matriz de cadena basada en el bloque de c...

0  Cita en formato de cadena  ( Quotation in string format ) 
Necesito ayuda con un poco de formato de cadena y escape. A partir de este formato de cadena: string.format ("= if (o ({0} =" "; {1] =" ");" "; {0} - {1})"...

17  HTML: Use cotizaciones dentro de las cotizaciones dentro de las cotizaciones  ( Htmluse quotes within quotes within quotes ) 
Estoy atascado con este problema: <body onload="document.body.innerHTML="<script>alert('hi')</script>""> El problema es que no puedo usar cotizaciones ...

3  C # manejar una sola cita doble en la cadena (JSON)  ( C sharp handle single double quote in the stringjson ) 
Estoy usando C # para manejar el formato JSON para analizar algunos datos y he encontrado una situación en la que recibo este tipo de JSON: gmailcom6 Co...

5  Patrón GREP PATUMOS SOLO Y DOBLE  ( Grep pattern single and double quotes ) 
¿Hay alguna diferencia entre encerrar grep PATRONES EN CITA SOLA Y DOBLE? grep "abc" file.txt y grep 'abc' file.txt Estoy preguntando ya que n...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos