Как переместиться вверх в пределах одной строки, перенесенной по словам, в Vim?

Как переместиться вверх в пределах одной строки, перенесенной по словам, в Vim?

Скриншот
(Нажмите на изображение, чтобы увеличить)

Посмотрите на изображение выше, это одна строка, которая объявляет огромный список. Теперь предположим, что мой курсор находится на первом элементе 'i'и я нажимаю 'j', тогда курсор напрямую переходит на строку new_s='', но мне нужно, чтобы курсор перешел на 's' слова 'she'ниже'i'

Есть какой-либо способ сделать это?

решение1

jперемещает курсор вниз на одну позициюфизическая линия. Вы можете использовать gjдля перемещения вниз на один шаготображаемая строка.

решение2

Существующие ответы точны.

Я хотел добавить, что j/ kи gj/ gkстрого эквивалентны, когда вы работаете с текстом без переносов. Таким образом, следующие сопоставления столь же безвредны (если вы этого не делаете :set wrap), сколь и полезны (если вы :set wrap):

nnoremap j gj
nnoremap k gk

решение3

Мне нравится сценарий отсюда: http://vim.wikia.com/wiki/Перемещение_курсора_по_отображаемым_линиям_при_переносе " отображение для выполнения движений на 1 строке экрана в режиме переноса

функция! ScreenMovement(перемещение)
  если &wrap && b:gmove == 'yes'
    вернуть "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")
" переключить
функцию showbreak! TYShowBreak()
  if &showbreak == ''
    set showbreak=>
  else
    set showbreak=
  endif
endfunction
let b:gmove = "yes"
function! TYToggleBreakMove()
  if exist("b:gmove") && b:gmove == "yes"
    let b:gmove = "no"
  else
    let b:gmove = "yes"
  endif
endfunction
nmap ,b TYShowBreak()
nmap ,bb TYToggleBreakMove()

Затем вы можете использовать ,b для отображения переноса строки (пример выше использует символ '>'). Затем ,bb отключает перемещение экрана, если у вас установлен перенос

Кроме того, в моем VIMRC также установлена ​​обёртка для привязки:

"--- 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

решение4

Если вы нажмете gj, курсор переместится на одну строку вниз, gk переместит вас на одну строку вверх. Я предполагаю, что вы находитесь в обычном окне консоли?

Ваше здоровье

Связанный контент