2009-04-28 19 views

Respuesta

117

Seleccione el texto que desea guardar, ya sea en la línea visual o bloquear el modo visual, y

:w new.txt 

Eso es lo que escribe, pero en realidad no se ver exactamente lo que está por encima. Cuando presione :, irá a la línea de comando que se completará automáticamente con la información de selección. Se verá algo como esto:

:'<,'> 

sigan adelante escribiendo el resto (w new.txt) para obtener

:'<,'>w new.txt 

... y pulse enter.

+10

Eso no proporciona el resultado esperado, ya que solo escribe líneas completas, sin tener en cuenta la posición inicial y final de selección dentro de la línea. ¿Alguna solución para eso? De lo contrario, me gustaría volver a presentar la pregunta principal. – dronus

+1

@dronus - No entiendo muy bien lo que estás preguntando. Esto hace lo que el OP preguntó, a lo mejor de mi comprensión, la pregunta. – Rook

+3

Si selecciona en cualquier modo visual que no sea de línea, ': w' aún escribe las líneas completas tocadas por el rango seleccionado, pero no el rango exacto que comienza o termina dentro de las líneas. Por ejemplo, si selecciona una columna angosta en el modo de selección de bloque, o una parte de una línea en modo de selección visual, la línea completa se escribirá por ': w', incluso si' y'se copiaran las partes correctas de la línea . – dronus

4

Probablemente hay una manera más sencilla de hacer esto, pero lo que me gustaría hacer es crear un nuevo buffer (o pestaña) y luego pegarlo en la p. Puede crear un nuevo buffer con :new o una nueva pestaña con :tabnew. Puede escribir el búfer/pestaña en un archivo de forma normal con :w filename.

+1

Asegúrese de eliminar la línea adicional en la parte superior !! (Pegar en un búfer vacío crea una línea adicional en la parte superior, o si usa 'P', en la parte inferior.) –

16

Con el bloque seleccionado, puede :'<,'>w other-file, que escribirá solo el bloque seleccionado en other-file. Al marcar : en modo visual, debe colocar '<,'> en la línea de comandos, por lo que solo tiene que escribir :w other-file.

+1

Vim siempre selecciona líneas enteras para canalizar comandos externos, por lo que puede usar el comando 'cortar' de unix/cygwin para seleccionar el rectángulo de la columna N a M, de cada línea en la selección: ': '<,'> w! cut -cN-M> new.txt'. Sorprendido de que la respuesta más votado y los lectores no parecen entender la pregunta. – mosh

2

Al igual que @dronus mencionado en los comentarios, las sugerencias :w !pbcopy no se copian correctamente porque copia toda la línea. Si quiero copiar solo la URL en una línea, no podré. Aquí hay una línea que se pueden agregar a su archivo .vimrc de manera que cada vez que pulse Ctrl-C, la línea seleccionada en su vim se copiará al portapapeles:

map <C-c> y:e ~/clipsongzboard<CR>P:w !pbcopy<CR><CR>:bdelete!<CR> 

Si desea leer detalles acerca de lo que este lo hace, puede leer sobre esto en my blog

Es la misma implementación que lo que sugirió @rmeador.

1

similares a la solución de @ Songz, prefiero hacerlo de esta manera el uso de ": nueva"

vmap <C-c> y:new ~/.vimbuf<CR>VGp:x<CR>:!pbcopy < ~/.vimbuf<CR><CR> 
+0

pbcopy es, que yo sepa, solo presente en OSX. Existen programas similares en Linux y otros sistemas, pero tienen diferentes nombres y funcionan de manera diferente. –

+0

Sí, funciona solo si el ejecutable pbcopy :) Así que no hay daño en absoluto – chenkaie

Cuestiones relacionadas