2011-02-02 9 views
14

Si seleccioné texto en el modo visual, ¿cómo inserto el texto seleccionado en la línea de comando?vim: inserte el texto seleccionado en la línea de comando?

Por ejemplo, si quiero buscar el texto seleccionado actualmente, podría usar y/<c-r>" ... ¿Pero hay alguna forma de hacerlo sin tener que tirar primero del texto seleccionado?

Editar: Un mejor ejemplo, ya que buscar en modo visual ampliaría la selección: si selecciono parte de un nombre de archivo y deseo agregarlo, lo abriré en un nuevo editor.

Respuesta

2

Después de activar el modo visual y seleccionar un texto, si golpeo / para buscar hacia adelante y presione <C-R>*, me sale el texto seleccionado se inserta en la línea de comandos.

Otra forma (al menos en Linux) es presionar <S-Insert>, que se inserte el contenido de la selección actual en X11 (por ejemplo, seleccionar algo en Firefox y se puede <S-Insert> en cualquier otra aplicación para copiar la selección, de nuevo, por lo menos en Linux).

Tenga en cuenta que con su ejemplo específico, después de insertar texto después del comando /, su selección visual se expandirá para incluir la siguiente ocurrencia de lo que está buscando.

Editar: estaba asumiendo GVim, que copia la selección visual en el búfer de selección X11 (ver :help x11-selection para obtener más información).

Si está utilizando Vim dentro de una consola, entonces creo (pero podría ser incorrecto) que su mejor opción es seleccionar el texto que desea con el mouse mientras presiona Shift hacia abajo, y luego usar <S-Insert> para copiar ese texto en la línea de comando. Esto funciona en Linux y probablemente en OSX también; No sé sobre Windows, lo siento.

+0

Lamentablemente, esto solo funciona si X11 está disponible (por ejemplo, no funciona en OSX o en SSH). Sin embargo, uno señala que no hará exactamente lo mismo en el caso de la búsqueda. He actualizado mi pregunta con un mejor ejemplo. –

+0

David, cuando trabajo sobre SSH utilizo la técnica "seleccionar con shift-mouse e shift-insert" :) .. Cuando lo pensamos, la ÚNICA forma en que Vim solo (sin ayuda externa) puede copiar algo de un buffer a la línea de comando es a través de un registro. Su pregunta fue sobre cómo evitar hacer eso, y la respuesta se encuentra en las instalaciones de su sistema operativo o entorno de gráficos; shift-insert es uno. –

+0

Usted dice "la ÚNICA forma en que Vim solo (sin ayuda externa) puede copiar algo de un búfer a la línea de comando es a través de un Registro" - ¿por qué? –

1

Sé que esto puede o no puede ayudarlo, pero escriba! Command from vim .. No es copiar y pegar, pero si usa ssh, al menos le permitirá ver su (s) buffer (es) mientras estás escribiendo tu comando.

ex: hacer

En realidad, todo depende de lo que el medio ambiente que está en ..

Si está utilizando la masilla de las ventanas, en realidad se puede seleccionar y copiar texto de la misma (como configurable dentro de la masilla) y pegue en otra sesión de masilla u otra ventana (si usa screen o tmux).

Si realmente está en la caja y tiene un entorno gráfico, copie & pegar debería ser bastante fácil (así que supongo que no está en esta posición).

Espero que ayude, lo siento si no lo hace.

+0

Lo siento, no estoy seguro de cómo eso podría ayudar. Estoy especialmente interesado en el texto seleccionado con el modo visual (a menudo me resulta más fácil usar el modo visual que el mouse). –

7

He reasignado : en modo visual para resolver este problema. Con siguiente asignación puedo pegar texto seleccionado a la línea de comandos y b - responsabilidad - mover el cursor a la posición más a la izquierda:

vnoremap : y:<C-r>"<C-b> 

Un pequeño inconveniente que puede ver - pulsando : ahora cancela la selección.

2
  1. Ponga el código de copiar y pegar en el archivo de configuración vimrc.
  2. Vuelva a abrir el editor vim.
  3. Seleccionar texto (por ejemplo, utilizando v)
  4. Entre en el modo de comandos usando:
  5. El texto seleccionado puede ahora ser pegado al mando de línea usando Control-p

El texto seleccionado tendrá caracteres especiales escaparon listo para usar en expresiones regulares

Créditos:

  1. Sobre la base de la idea de ierton (en esta página)
  2. La mayor parte de código tomado de Bryan Kennedy

Vim search and replace selected text

" Escape special characters in a string for exact matching. 
" This is useful to copying strings from the file to the search tool 
" Based on this - http://peterodding.com/code/vim/profile/autoload/xolox/escape.vim 
function! EscapeString (string) 
    let string=a:string 
    " Escape regex characters 
    let string = escape(string, '^$.*\/~[]') 
    " Escape the line endings 
    let string = substitute(string, '\n', '\\n', 'g') 
    return string 
endfunction 

" Get the current visual block for search and replaces 
" This function passed the visual block through a string escape function 
" Based on this - https://stackoverflow.com/questions/676600/vim-replace-selected-text/677918#677918 
function! GetVisual() range 
    " Save the current register and clipboard 
    let reg_save = getreg('"') 
    let regtype_save = getregtype('"') 
    let cb_save = &clipboard 
    set clipboard& 

    " Put the current visual selection in the " register 
    normal! ""gvy 
    let selection = getreg('"') 

    " Put the saved registers and clipboards back 
    call setreg('"', reg_save, regtype_save) 
    let &clipboard = cb_save 

    "Escape any special characters in the selection 
    let escaped_selection = EscapeString(selection) 

    return escaped_selection 
endfunction 

" Start the find and replace command across the entire file 
vmap <leader>z <Esc>:%s/<c-r>=GetVisual()<cr>/ 

" When in visual mode, 
" before command mode is entered by using : 
" Put the contents of any selected text into 
" the default register 
" leave the text highlighted. 
" Based on ierton - https://stackoverflow.com/questions/4878980/vim-insert-selected-text-into-command-line 
vnoremap : "pygv: 

"Map ctrl-P to paste escaped contents of default register in command mode 
" Based on bryan kennedy - https://stackoverflow.com/questions/676600/vim-search-and-replace-selected-text 
cnoremap <C-P> <c-r>=GetVisual()<cr> 
0

he encontrado la solución . Cuando presiona: en modo visual en lugar de normal ":" tiene allí ": '<,'>". Por lo tanto, debe borrar esto para escribir el comando como de costumbre. Para expandir al texto seleccionado < C-r> * funciona bastante bien.

vnoremap <M-8> :<BS><BS><BS><BS><BS>NGrep <C-r>*<CR> 

Si desea editar comando antes de lanzarlo justo detrás eliminar < CR>.

Cuestiones relacionadas