¿Cómo vuelco un comando vim interno (no un comando de shell) en un nuevo búfer?
Por ejemplo, quiero volcar una lista de todos los plugins en :enewde :scriptnamesmodo que pueda buscarla.
¿Cómo vuelco un comando vim interno (no un comando de shell) en un nuevo búfer?
Por ejemplo, quiero volcar una lista de todos los plugins en :enewde :scriptnamesmodo que pueda buscarla.
Respuestas:
Puede usar :redirpara redirigir la salida a una variable, registro o archivo. Ejemplo de redireccionamiento al registro sin nombre:
:redir @">|silent scriptnames|redir END|enew|put
Alternativamente, scriptease.vim de Tim Pope proporciona el :Scriptnamescomando que se cargará :scriptnamesen la lista de soluciones rápidas y :copen.
Si se encuentra redirigiendo muchos comandos, es posible que desee resumir esto en un comando:
command! -nargs=+ -complete=command Redir let s:reg = @@ | redir @"> | silent execute <q-args> | redir END | new | pu | 1,2d_ | let @@ = s:reg
Ahora puede usar el :Redircomando para redirigir la salida a un nuevo búfer. por ejemplo :Redir scriptnameso :Redir ls.
Vim 8 se entrega con la nueva execute()función. Puede usar la execute()función en lugar de :redircapturar la salida del comando anterior.
:enew|pu=execute('scriptnames')
Para más ayuda ver:
:h :redir
:h :silent
:h :scriptnames
:h :enew
:h :put
:h execute()
:redir ENDle dice a Vim que finalice la redirección de mensajes. Ver:h :redir
Para completar, quiero presentar estas increíbles funciones que recopilé (robé) de romainl
" redirect the output of a Vim or external command into a scratch buffer
function! Redir(cmd)
if a:cmd =~ '^!'
execute "let output = system('" . substitute(a:cmd, '^!', '', '') . "')"
else
redir => output
execute a:cmd
redir END
endif
tabnew
setlocal nobuflisted buftype=nofile bufhidden=wipe noswapfile
call setline(1, split(output, "\n"))
put! = a:cmd
put = '----'
endfunction
command! -nargs=1 Redir silent call Redir(<f-args>)
Esto tomará la salida de comando normal o del sistema y lo colocará en una nueva pestaña. Siéntase libre de cambiar la línea tabnewa vsplit, o splitetc.
También está el plugin bufferize.vim :
:Bufferize scriptnames
que es básicamente una versión empaquetada de la respuesta aceptada (usando :redir) y puede ser más conveniente para algunos.
ENDsignifica