5

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

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

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

5 ответов5

10

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

7

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

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

nnoremap j gj
nnoremap k gk
2

Мне нравится сценарий отсюда:http://vim.wikia.com/wiki/Move_cursor_by_display_lines_when_wrapping "отображение, чтобы заставить движения работать на 1 строке экрана в режиме обтекания

функция! ScreenMovement(движение)
  if & wrap && b:gmove == 'да'
    вернуть "г". а: движение
  еще
    вернуть: движение
  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")
"переключить демонстрацию
функция! TYShowBreak()
  if & showbreak == ''
    установить showbreak =>
  еще
    set showbreak =
  ENDIF
EndFunction
let b:gmove = "да"
функция! TYToggleBreakMove()
  если существует ("b:gmove") && b:gmove == "да"
    let b:gmove = "no"
  еще
    let b:gmove = "да"
  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
2

Мое поведение с Vim было немного другим, возможно, из-за опций, с которыми он был скомпилирован. В этой версии навигация по линиям с помощью j и k будет по умолчанию перемещаться по одной физической строке, т. Е. Что будут делать gj и gk . Необъяснимо, и, возможно, по какой-то другой причине, похоже, что это делается только для файлов Unix, файлы DOS будут по-прежнему перемещаться по всей строке, то есть по нескольким физическим, завернутым в слова.

Чтобы заставить j и k перемещаться только по физическим строкам для всех файлов, мне пришлось установить все это в моем .vimrc чтобы получить ожидаемое поведение:

nnoremap j gj
nnoremap k gk
vnoremap j gj
vnoremap k gk
1

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

ура

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .