Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

コマンドを繰り返し実行する

$
0
0

繰り返す

ノーマルモードで@:と打つとコマンドを繰り返し実行できます。
10@:と打てば10回コマンドが繰り返し実行されます。

コマンドラインモードで :echo localtime()を実行後、@:を連打するか1秒以上経過してから@:と打つと、コマンドラインに新しく現在の時刻が表示されます。

サンプルをいくつか載せます。

サンプル1

sample1.vim
function! Insert1() abort
    normal! i1
endfunctioncall feedkeys(":call Insert1()\<CR>",'t')
Vim起動
vim -Nu NONE -i NONE -S sample1.vim

Vimを起動するとバッファに1が挿入されている状態になります。
@:を打つと繰り返して実行されます。

但し、スクリプトの中で@:を実行したらE30が発生します。
一瞬でエラーメッセージが消えるのでエラーがなかったように見えますが:messageで確認できます。
次のサンプルを試すとE30が発生します。

sample1a.vim
function! Insert1() abort
    normal! i1
endfunctioncall feedkeys(":call Insert1()\<CR>",'t')
normal! @:
Vim起動
vim -Nu NONE -i NONE -S sample1a.vim

サンプル2

sample2.vim
function! Insert1() abort
    normal! i1
endfunction

command! Insert1 :call Insert1()
Vim起動
vim -Nu NONE -i NONE -S sample2.vim

Vimを起動した後に手動で:Insert1を実行してください。
sample2.vimの中で:Insert1を実行しても繰り返しに対応できません。
@:を打つと:Insert1が繰り返されます。

サンプル3

sample3.vim
function! Insert1() abort
    normal! i1
endfunction

command! Insert1 :call Insert1()nnoremap<C-a> :<C-u>call feedkeys(":Insert1\r",'t')<CR>
Vim起動
vim -Nu NONE -i NONE -S sample3.vim

Ctrl-aを押した後に@:で繰り返し実行できるようになります。

ちなみにnnoremapfeedkeys\<CR>を組み合わせて書くとE114とE116が発生します。

nnoremap <C-a> :<C-u>call feedkeys(":Insert1\<CR>", 't')<CR>

\<CR>の部分を \rと書けばエラーは発生しなくなります。

繰り返せないサンプル

.viminfoの コマンドライン 項目の履歴にコマンドを追加しても繰り返せません。

bad1.vim
call histadd(':','echo localtime()')

:history cで確認すると確かに:echo localtime()が履歴に追加されていますが繰り返せないようです。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>