Vimで、コマンドラインモードで、ユーザが入力中の値が取りたい

cnoremap <c-a> <c-b>"<cr>:let @l=@:<cr>:call Increment(1)<cr>:<c-r>l

function Increment(plus)
    let inputting = @l

    " 中略
    " 中略
    " 中略

    let @l = "新しい入力値"
    call histdel(':', -1)
endfunction


とりあえず入力中のコマンドを実行させてしまって、
コマンドの履歴から、入力中のテキストを拾えば良いよ。


でも、本当にコマンドが実行されると困るから、
頭に「"」入れて、コメントアウトで無効にしておくよ。


コマンドを実行させた分、余計なコマンド履歴が入っちゃうから、
最後に消しておくと良いよ。




はじめに思いついた人、頭良いな!!
ちょっと感動した。
この方法、かなり昔からあるんだよね。


この方法以外に、CmdwinLeaveイベントを無理矢理起こさせて、
拾う方法もあるみたいだが、、