Vimに単一の文字を挿入しますか?


25

Vim(7.2)にはr、1つの文字を別の文字に置き換える通常モードのコマンドがあります。たとえば、入力rXするとカーソルの下の1文字が置き換えられ、X通常モードに戻ります。

単一の文字を挿入してから通常モードに戻る通常モードコマンドはありますか?



包括的なソリューションについては、vim.wikia.com / wiki / Insert_a_single_characterを参照してください。
マキシムススロフ

回答:


6

MelBurslanは、この機能がネイティブに存在しないことは正しいですが、ユーザー定義のコマンドを作成することは、実際に作成する方法ではありません。私は数分間いじって、これを思いつきました:

:nmap <silent> ,s "=nr2char(getchar())<cr>P

これは、レジスター(この場合は「式」レジスター)からテキストを「入れる」ことを含むVimのトリックを使用します。レジスタにプラグインされる式は「nr2char(getchar())」で、単一の文字列を返します。

この方法でマッピングを作成した理由は、マッピングの「途中」でユーザー入力を取得するのは難しいため、予測できない動作をする可能性があるためです。このマッピングでさえ、ユーザーが文字を入力するのを待っている間、カーソルをステータス領域にドロップします。


8

下のコメントでこの素晴らしい答えをくれたジョニーに感謝します。

":nmap <C-i> i_<Esc>r"

これはControl + iをマッピングして単一の文字を挿入し、非常に簡潔に実行します。

vimrcファイルでは、これは次のようになります。

nnoremap <C-i> i_<Esc>r

スペースを使用するようにマッピングを変更しました。お好みのキーに変更できます:

nnoremap <Space> i_<Esc>r

1
これは最も簡潔でシンプルな答えです。
ディランテピガイ

4

私の知る限り、viエディタの広く普及した具体化にはそのような機能はありませんが、vimにはカスタムコマンドを作成する機能があります。以前にここで説明しました:このスレッドで

あなたがしたいことをしているカスタムコマンドを作成できるかもしれません。


3
次に、Ctrl-Iをマッピングして単一の文字を挿入するコマンドを示します。「:nmap <Ci> i_ <esc> r」
ジョニー

2

これを行う簡単な方法は、Cut xおよびPut pコマンドを使用することです。それ*が挿入したい文字であると言います。を使用して挿入しi * Escます。その後、ヒットx。それはキャラクターをカットします。これで、ヒットpして単一の文字を入力できます。その文字を300回挿入する必要がある場合は、次のように入力できます300p

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.