Vim es mi editor favorito, pero ajustarlo para que nos sea cómodo es un proceso que lleva su tiempo. Concretamente para editar texto siempre uso la opción «wrap» que lo que hace es romper las líneas en pantalla, por lo que cada párrafo es una línea, así si cambio el ancho del editor los párrafos siguen siendo párrafos.

El problema es que los movimientos <Up>(k) <Down>(j) por la pantalla mueven de línea en línea, o lo que es lo mismo para mi usando wrap, de párrafo en párrafo lo que resulta muy incómodo para moverse ya que si quieres ir a una palabra de en medio tienes que ir desplazándote a la derecha o izquierda hasta llegar. Así que me puse a buscar cómo podría solucionar esto, y como siempre, alguien lo había pensado ya.

Se trata del vim-tip #38, el tip es importante pero más aun los comentarios, en particular mi solución (modificando ligeramente un comentario) ha resultado ser esta:

" tip #38
function! ScreenMovement(movement)
    if &wrap
        return "g" . a:movement
    else
        return a:movement
    endif
endfunction

onoremap <silent> <expr> j ScreenMovement("j")
onoremap <silent> <expr> <Down> ScreenMovement("j")
onoremap <silent> <expr> k ScreenMovement("k")
onoremap <silent> <expr> <Up> 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> <Down> ScreenMovement("j")
nnoremap <silent> <expr> k ScreenMovement("k")
nnoremap <silent> <expr> <Up> ScreenMovement("k")
nnoremap <silent> <expr> 0 ScreenMovement("0")
nnoremap <silent> <expr> ^ ScreenMovement("^")
nnoremap <silent> <expr> $ ScreenMovement("$")

vnoremap <silent> <expr> j ScreenMovement("j")
vnoremap <silent> <expr> <Down> ScreenMovement("j")
vnoremap <silent> <expr> k ScreenMovement("k")
vnoremap <silent> <expr> <Up> ScreenMovement("k")
vnoremap <silent> <expr> 0 ScreenMovement("0")
vnoremap <silent> <expr> ^ ScreenMovement("^")
vnoremap <silent> <expr> $ ScreenMovement("$")

Esto va en el ~/.vimrc es un poco largo pero funciona, con esto ya nos podemos mover por el texto correctamente si usamos wrap.