vim で単語で折り返された 1 行内で上に移動するにはどうすればよいですか?

vim で単語で折り返された 1 行内で上に移動するにはどうすればよいですか?

スクリーンショット
(画像をクリックすると拡大します)

上の画像を見てください。これは巨大なリストを宣言する1行です。カーソルが最初の要素にあり'i'、「j」を押すとカーソルは直接その行に移動しますが、私が望んでいるのは、カーソルが下のnew_s=''単語の「s」に移動することです。'she''i'

これを実行する方法はありますか?

答え1

jカーソルを1つ下に移動します物理的なラインgj1つ下に移動するには表示された行

答え2

既存の回答は正確です。

折り返されていないテキストを扱う場合、j/kgj/ は厳密に同等であることを付け加えておきます。したがって、次のマッピングは、 ( しない場合は) 無害であるだけでなく、 ( する場合 ) 便利です。gk:set wrap:set wrap

nnoremap j gj
nnoremap k gk

答え3

ここからのスクリプトが気に入っています: http://vim.wikia.com/wiki/Move_cursor_by_display_lines_when_wrapping 「ラップモードで1画面ライン上で移動を行うマッピング」

関数! ScreenMovement(movement)
  の場合、 &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 == ''
    設定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()

次に、,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 と入力するとカーソルが 1 行下に移動し、gk と入力すると 1 行上に移動します。通常のコンソール ウィンドウにいると思いますか?

乾杯

関連情報