2012-03-26 17 views
16

En Vim, se pueden unir dos líneas escribiendo mayúscula J. Sin embargo, a estas se suele unir un espacio.¿Cómo cambio el carácter de unión en Vim?

Parece que recuerdo que había una forma de cambiar el carácter utilizado para la unión configurando alguna variable, pero parece que no puedo volver a encontrarla.

Agradecería que alguien pudiera recordarme o confirmar que no se puede hacer.

+3

En respuesta a los dos votos cerrados, el faq establece que las preguntas que cubren "herramientas de software comúnmente utilizadas por los programadores" están en el tema. Por lo tanto, esta pregunta no debe cerrarse fuera del tema. – DrAl

Respuesta

10

Cuando Quiero unirme a sólo unas pocas líneas que utilizan una combinación de teclas 3 (modo normal):

Jr, 

siendo , el carácter de unión.

En caso de que quiera unir más líneas o incluso unir líneas en grupos, utilizo el combo anterior con una macro.

Por ejemplo, para transformar 3 líneas en un 3 columnas tabla CSV, grabo esta macro (en el grupo a j por supuesto):

qjJr,Jr,jq 

Por lo tanto, el uso de @j combinaciones 3 líneas usando , y va a la siguiente línea.

[email protected] convierte 10 líneas.

-1

Es mapeo. Puede leer el tutorial en vim wikia: Mapping keys in vim

Pruebe el siguiente comando en modo comando e intente presionar. Esto debería funcionar :)

:map <space> J 
+0

Siento que debería haber algo menos general que eso. – merlin2011

+0

Has malentendido la pregunta. No es necesario cambiar la tecla que se debe presionar para invocar el comando de unión de línea. Está pidiendo controlar qué personaje se inserta entre las líneas unidas. –

5

No es un ajuste que le permite hacer esto directamente, véase:

:help J 

, en particular, el texto a continuación la lista de comandos.

Un par de maneras que usted puede hacer esto:

:nnoremap J gJi.<ESC> 
" or 
let joinchar = ';' 
nnoremap J :s/\n/\=joinchar/<CR> 

La última opción le permite cambiar sobre la marcha cambiando la opción joinchar.

1

intentar algo como esto en su .vimrc:

nnoremap Y Jxi*<Esc>

Se va a reasignar Y para unirse a las líneas con un *.

0

De http://vim.wikia.com/wiki/Remap_join_to_merge_comment_lines

ponga esto en su .vimrc:

function! JoinWithLeader(count, leaderText) 
    let l:linecount = a:count 
    " default number of lines to join is 2 
    if l:linecount < 2 
    let l:linecount = 2 
    endif 
    echo l:linecount . " lines joined" 
    " clear errmsg so we can determine if the search fails 
    let v:errmsg = '' 

    " save off the search register to restore it later because we will clobber 
    " it with a substitute command 
    let l:savsearch = @/ 

    while l:linecount > 1 
    " do a J for each line (no mappings) 
    normal! J 
    " remove the comment leader from the current cursor position 
    silent! execute 'substitute/\%#\s*\%('.a:leaderText.'\)\s*/ /' 
    " check v:errmsg for status of the substitute command 
    if v:errmsg=~'Pattern not found' 
     " just means the line wasn't a comment - do nothing 
    elseif v:errmsg!='' 
     echo "Problem with leader pattern for JoinWithLeader()!" 
    else 
     " a successful substitute will move the cursor to line beginning, 
     " so move it back 
     normal! `` 
    endif 
    let l:linecount = l:linecount - 1 
    endwhile 
    " restore the @/ register 
    let @/ = l:savsearch 
endfunction 

nnoremap <space> :<C-U>call JoinWithLeader(v:count, '"')<CR> 

Esto también le permite reasignar J a otra cosa.

0

Será más rápido si se reemplaza al final de la línea con una coma (o se une a carácter)

:%s/$/, 

y luego unirse a múltiples líneas ya sea proporcionando una gama o mediante la selección de líneas en modo visual y el uso de la comando join

10J 
Cuestiones relacionadas