¿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 :enew
de :scriptnames
modo 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 :enew
de :scriptnames
modo que pueda buscarla.
Respuestas:
Puede usar :redir
para 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 :Scriptnames
comando que se cargará :scriptnames
en 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 :Redir
comando para redirigir la salida a un nuevo búfer. por ejemplo :Redir scriptnames
o :Redir ls
.
Vim 8 se entrega con la nueva execute()
función. Puede usar la execute()
función en lugar de :redir
capturar 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 END
le 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 tabnew
a vsplit
, o split
etc.
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.
END
significa