前提・実現したいこと
vimで複数行を選択して一括で「連続で」上下移動させるscriptを作りたいのですがうまく動かず困っています。
試したこと
下記のコードを試し、コメントアウトしているところが本命です。
複数行をビジュアルモードで選択した後、試しにfunctionを使わず
vnoremap <S-Down> xp<S-v> 5+j
を使うと、5行選択がキープされたまま連続で下にシフトさせることができました。
一方コメントアウト1を外してfunctionを機能させるとjとg:rowsがうまく連結してくれず
選択行数の選択をキープできません。
念のためコメントアウト2を試したら選択行数が返ってきたのでfunctionは問題ないと思っています。
vim
1vnoremap <S-Down> xp<S-v> 5+j 2"1. vnoremap <S-Down> xp<S-v> :Rows_count()<CR> g:rows+j 3"2. vnoremap <S-Down> :call Rows_count()<CR> :echo g:rows<CR> 4 5function Rows_count() 6 let g:rows = line("'>") - line("'<") + 1 "選択行数を取得 7 return g:rows 8endfunction 9
結局のところ、map上で変数+jを実現するにはどうすればよいかという質問で解決します。
スクリプト・mapを使った別の代替案でも構いません。
ご回答いただけると幸いです。
なおカット&ペーストすればよいのは分かっていますが、勉強かねてスクリプトもしくはmapを作ることを主眼としています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/18 02:36 編集
2020/10/18 02:28