He estado recibiendo datos registrados en un archivo de texto que es solo una línea larga con cada valor separado por un espacio. ¿Hay un comando o conjunto de comandos que dividirán una línea en varias líneas?
11
He estado recibiendo datos registrados en un archivo de texto que es solo una línea larga con cada valor separado por un espacio. ¿Hay un comando o conjunto de comandos que dividirán una línea en varias líneas?
Simplemente puede reemplazar cualquier espacio consecutivo en la línea con una nueva línea usando el comando :s/\s\+/\r/g
. \s\+
significa uno o más caracteres de espacio en blanco, y \r
es una nueva línea, vea :help :substitute
y :help regexp
para más detalles. Si ejecuta el comando en una línea como:
foo bar baz
Usted obtiene:
foo
bar
baz
Si ha hlsearch
habilitado y no desea saturar su pantalla con espacios resaltados en todas partes, puede escribir una pequeña función como la siguiente para evitarlo:
function! SplitLineNicely()
" Save previous value of last search register
let saved_last_search_pattern = @/
" :substitute replaces the content of the search register with the `\s\+`
" pattern highlighting all whitespaces in the file
substitute /\s\+/\r/g
" Restore previous search register
let @/ = saved_last_search_pattern
endfunction
\r
, mira:help s/\r
. Podría ser reemplazado por una escritura literal de nueva línea<c-v><cr>
. En este contexto\n
es un carácter nulo, ver:help s/\n
.replaces the content of the register
- ¿Qué registro?El uso
vim
de la sustitución es probablemente una de las mejores formas de realizar su tarea, pero también puede usar una macro. Supongamos que tenemos los siguientes datos, con el cursor en algún lugar de la línea 1:Comenzando en modo normal, al golpear qqcomenzará a grabar una macro invocable a través de @q. Cualquier cosa escrita después qqserá repetible a través de la llamada mencionada anteriormente. Nuestro objetivo es grabar comandos normales que serán lo suficientemente generales como para permitir una repetición perfecta.
Por lo tanto, podemos escribir 0para llevar el cursor al inicio de la línea y luego fspacemover el cursor al primer espacio. Esto nos permite escribir renter, lo que resulta en:
Golpear qahora es una buena idea ya que nuestra macro reutilizable está lista para la repetición. De manera algo arbitraria, notamos que quedan 4 espacios para reemplazar con nuevas líneas. Por lo tanto, al golpear, 4@qrepetimos la
q
macro 4 veces, lo que resulta en:Tenga en cuenta que debido a la manera hemos creado la macro, habría sido seguro para repetir el comando más de 9000 veces, ya que sólo afectaría a la línea actual, y puesto que no había plazas a la derecha de la última entrada de datos, fspacelo hará 'bien' falla, evitando que los datos sean reemplazados por nuevas líneas.
Entonces, para repetir desde el principio:
qq0fspacerenterq9001@q
Proporciona nuestro resultado.
fuente
9001
tecla en tu teclado para escribir tu nombre de usuario rápidamente.La forma más fácil que he encontrado para dividir líneas en Vim es el comando de modo normal
gq
(escriba ambas letras en rápida sucesión en modo normal o visual).En modo visual, dividirá lo que esté seleccionado, en modo normal, siga
gq
con un movimiento.Por ejemplo,
gql
dividirá una línea al ancho establecido actualmente. Para establecer que el ancho de las líneas divididas sea diferente de su configuración actual, puede usar:set textwidth=n
, donden
está la cantidad de caracteres que desea en una línea, por ejemplo,10
y volver a su ancho normal cuando haya terminado.Obtuve esta información de un video de Youtube de Kholidfu que muestra cómo unir y dividir líneas en modo normal usando un movimiento.
fuente