j
move o cursor para baixo uma linha física . Você pode usar gj
para descer uma linha exibida .
(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?
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
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
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
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
Tags vim