vim перемещение с hjkl в длинных строках (линии экрана)
выделенный текст-это массив, в котором я хочу двигаться. Я должен нажать g перед нажатием j, чтобы переместить линию вниз. Есть ли какое-то отображение для моего .vimrc, что я могу просто использовать hjkl для перемещения строк экрана без нажатия g каждый раз.
Спасибо за помощь Матиас!--2-->
4 ответов
Я использую следующий фрагмент, который помогает со всеми формами навигации, включая такие вещи, как $ to end of line и т. д.
" mapping to make movements operate on 1 screen line in wrap mode
function! ScreenMovement(movement)
if &wrap
return "g" . a:movement
else
return a:movement
endif
endfunction
onoremap <silent> <expr> j ScreenMovement("j")
onoremap <silent> <expr> k ScreenMovement("k")
onoremap <silent> <expr> 0 ScreenMovement("0")
onoremap <silent> <expr> ^ ScreenMovement("^")
onoremap <silent> <expr> $ ScreenMovement("$")
nnoremap <silent> <expr> j ScreenMovement("j")
nnoremap <silent> <expr> k ScreenMovement("k")
nnoremap <silent> <expr> 0 ScreenMovement("0")
nnoremap <silent> <expr> ^ ScreenMovement("^")
nnoremap <silent> <expr> $ ScreenMovement("$")
вы можете переназначить j
и k
ключи (не уверен, что вам действительно нужно h
и l
..)
:map j gj
:map k gk
как только вы попробовали и понравились им, добавьте их в свой .vimrc
без ведущего :
вы можете просто переназначить j и k (например) в gj и gk:
" map j to gj and k to gk, so line navigation ignores line wrap
nmap j gj
nmap k gk
это отличная идея для редактирования длинных текстовых файлов, таких как документы latex. Но это не такая хорошая идея при редактировании кода, так как он может испортить некоторые макросы (как отмечает джелера в ответе Неда). Мой компромисс заключается в том, чтобы включить его только в режимах вставки (и замены), а не для чего-либо еще (я не знаю никаких макросов, которые я использую в режиме вставки, которые используют клавиши навигации):
" move on soft lines in insert mode
inoremap <Down> <C-o>g<Down>
inoremap <Up> <C-o>g<Up>
(взято из ответ)