¿Cómo puedo guardar un bloque de texto en modo visual en un archivo en Vim?
El título es muy descriptivo. Por si acaso, daré un ejemplo:
START BLOCK1
something
END BLOCK1
START BLOCK2
something
somenthing...
END BLOCK2
- Selecciono el
BLOCK1
en modo visual - Lo jalo presionando y
- ¿Cómo puedo guardar el yanked
BLOCK1
en algún otro archivo?
6 answers
Seleccione el texto que desea guardar, en modo visual de línea o en modo visual de bloque, y
:w new.txt
Eso es lo que escribes, pero en realidad no verás exactamente lo que está arriba. Cuando presione :
, irá a la línea de comandos que se completará automáticamente con la información de selección. Se verá algo como esto:
:'<,'>
Seguir escribiendo el resto (w new.txt
) para obtener
:'<,'>w new.txt
...y pulse intro.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-26 17:36:32
Con el bloque seleccionado, puede :'<,'>w other-file
, que escribirá solo el bloque seleccionado a other-file
. Pulsando :
en modo visual debería colocar '<,'>
en la línea de comandos para usted ya, por lo que realmente solo tiene que escribir :w other-file
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-28 21:36:51
Probablemente hay una forma más simple de hacer esto, pero lo que haría es crear un nuevo búfer (o pestaña) y luego pegarlo con p
. Puede crear un nuevo búfer con :new
o una nueva pestaña con :tabnew
. Puede escribir el buffer / tab en un archivo de forma normal con :w filename
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-28 21:32:44
Al igual que @dronus mencionado en los comentarios, las sugerencias :w !pbcopy
no se copian correctamente porque copian toda la línea. Si quiero copiar solo la url en una línea, no podré hacerlo. Aquí hay una línea que puede agregar a su archivo .vimrc
para que cada vez que presione CTRL-C, la línea seleccionada en su vim se copie al portapapeles:
map <C-c> y:e ~/clipsongzboard<CR>P:w !pbcopy<CR><CR>:bdelete!<CR>
Si desea leer detalles sobre lo que esto hace, puede leer sobre esto en mi blog
Es la misma implementación que lo que @ rmeador sugirió.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-09 21:25:21
Similar a la solución de @songz, prefiero hacerlo así usando ":new"
vmap <C-c> y:new ~/.vimbuf<CR>VGp:x<CR>:!pbcopy < ~/.vimbuf<CR><CR>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-16 15:06:18
Basándose en la variante de @chenkaie, funciona bien para mí:
let mapleader = ","
let g:mapleader = ","
vmap <leader>y y:new ~/.vbuf<CR>VGp:x<CR>
nmap <leader>p :r ~/.vbuf<CR>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-12 02:17:21