Como você move para cima dentro de uma única linha que é envolta em palavras no vim?

5

(Clique na imagem para ampliar)

Olhe para a imagem acima, é uma linha que declara uma lista enorme. Agora suponha que meu cursor esteja no primeiro elemento 'i' e eu pressione 'j' então o cursor vai diretamente para a linha new_s='' mas o que eu quero é o cursor ir para o 's' da palavra 'she' abaixo 'i'

Existe alguma maneira de fazer isso?

    
por karel 02.11.2012 / 09:10

5 respostas

9

j move o cursor para baixo uma linha física . Você pode usar gj para descer uma linha exibida .

    
por 02.11.2012 / 09:20
6

As respostas existentes estão no local.

Eu queria adicionar que j / k e gj / gk são estritamente equivalentes quando você está trabalhando em texto não encapsulado. Assim, os seguintes mapeamentos são inofensivos (se você não for :set wrap ), pois são úteis (se você for:set wrap):

nnoremap j gj
nnoremap k gk
    
por 02.11.2012 / 09:45
2

Eu gosto do script daqui: link "mapeamento para fazer com que os movimentos operem em uma linha de tela no modo de quebra automática

function! ScreenMovement(movement)
  if &wrap && b:gmove == 'yes'
    return "g" . a:movement
  else
    return a:movement
  endif
endfunction
onoremap j ScreenMovement("j")
onoremap k ScreenMovement("k")
onoremap 0 ScreenMovement("0")
onoremap ^ ScreenMovement("^")
onoremap $ ScreenMovement("$")
nnoremap j ScreenMovement("j")
nnoremap k ScreenMovement("k")
nnoremap 0 ScreenMovement("0")
nnoremap ^ ScreenMovement("^")
nnoremap $ ScreenMovement("$")
vnoremap j ScreenMovement("j")
vnoremap k ScreenMovement("k")
vnoremap 0 ScreenMovement("0")
vnoremap ^ ScreenMovement("^")
vnoremap $ ScreenMovement("$")
vnoremap j ScreenMovement("j")
" toggle showbreak
function! TYShowBreak()
  if &showbreak == ''
    set showbreak=>
  else
    set showbreak=
  endif
endfunction
let b:gmove = "yes"
function! TYToggleBreakMove()
  if exists("b:gmove") && b:gmove == "yes"
    let b:gmove = "no"
  else
    let b:gmove = "yes"
  endif
endfunction
nmap ,b TYShowBreak()
nmap ,bb TYToggleBreakMove()

Você pode então usar, b para exibir se a linha é envolvida (o exemplo acima usa o caractere '>'). Então, bb desliga o movimento da tela se você tiver um conjunto de quebra automática

Além disso, tenho o wrapping configurado para uma ligação no meu VIMRC também:

"--- wrap toggle with f2 key---"
function! ToggleWrap()
set wrap!|set wrap?
endfunction

"F2 toggles wrap
nmap <f2> :call ToggleWrap()<CR>
vmap <F2> <C-C>:call ToggleWrap()<CR>
imap <F2> <C-O>:call ToggleWrap()<CR>i
    
por 03.11.2012 / 00:56
1

Se você digitar gj o cursor moverá uma linha para baixo, o gk lhe dará uma linha. Eu suponho que você está em uma janela normal do console?

Felicidades

    
por 02.11.2012 / 09:24
1

Meu comportamento com o Vim foi um pouco diferente, talvez por causa das opções com as quais ele é compilado. Nesta versão, a navegação de linha com j e k navegaria por uma linha física por padrão, ou seja, o que digitar gj e gk faria. Sem explicação, e possivelmente por algum outro motivo, parece que apenas para fazer isso em arquivos Unix, os arquivos do DOS ainda navegariam na linha completa, ou seja, os múltiplos físicos, os que envolvem a palavra.

Para obter j e k para navegar apenas pelas linhas físicas de todos os arquivos, tive que definir todos esses valores em .vimrc para obter o comportamento esperado:

nnoremap j gj
nnoremap k gk
vnoremap j gj
vnoremap k gk
    
por 12.02.2016 / 17:51

Tags