getchar()
code:vim
param
expr
return
expr
ユーザーからの入力 or 入力ストリームから1文字取得する
入力された文字のマッピングは実行されない
入力待ち状態であることをユーザーにわかるようにしないといけない
どうすればいいんだろ
code:vim
:echo '> ' | echo getchar()
とすれば、> が表示されて、文字入力待ちとなる
exprを省略すると1文字取得できるまで待機する
ユーザーからの入力待ち状態を作れる
exprが0のときは、1文字取得できる場合のみ、取得する?取得できなければ0を返す
入力ストリームから取得する時の話ってことか
exprが1のときは、1文字取得できるか判定する。実際には取得しない。取得できなければ0を返す
expr が省略 or 0
文字列全体 or 特殊キー を返す
文字が1文字が入力
数値を返す
数値ではなかった場合、エンコードして文字列にする
どうやってエンコードするの?関数知りたい
数値ではない場合はどんな文字を入力された時?
特殊キーが入力
0x80から始まるバイト列からなる文字列
"\<Left>"のような値で、文字列として返される
code:vim
:echo getchar() " F1 を入力
<80>k1
<80>kってなんだろ...
取得した値の変換は以下のようにできる
code:vim
let c = getchar()
" 数値(文字)だった場合、文字に変換する
if c =~ '^\d\+$'
let c = nr2char(c)
endif
expr が 1
最初の1バイトだけを返す?
最初の説明と矛盾してる。。。
exprが1のときは、1文字取得できるか判定する。実際には取得しない。取得できなければ0を返す
1バイト文字の場合、その文字のコード値を返す
日本語も受け付けられた
code:vim
:echo nr2char(getchar()) " あ と入力
あ
code:vim
:echo getchar() " あ と入力
12354
Unicodeの値だ
normal と組み合わせるの面白い
code:vim
:exec 'normal '.getchar() " <Left> を入力
\<Left>にマッピングされているコマンドが実行された