13

これはSOにとっては良い質問ではないかもしれませんが、何年もの間私を悩ませてきました。Googleは知らなかったので、毎週のプログラミング作業に影響を与えるので、試してみましょう。

「==」の代わりに「=」、スペースがない、引用符や角かっこで囲まれているなど、1つの文字が欠落している状況に陥ることがよくあります。

では、なぜvimには単一の文字を挿入するための適切なコマンドがないのですか?適切な意味で、カウントと繰り返しをサポートします.

理論的根拠は何ですか、そして私が見逃している正しい使用パターンは何ですか?それはこの機能を不要にしますか?ずっと必要なようですので、まだオリジナルのviに追加されていないのには何らかの理由があるに違いありません。

のような単純な基本的なキーバインディングを追加するの:nmap <Space> i_<Esc>rは簡単ですが、新しい環境で簡単な編集を行う場合、それはかなり不便であり、この単純なバージョンはとにかく適切に機能しません。

PS。実際に、合計2つのキーストロークで1つの文字だけを挿入し、コマンドモードのままにするデフォルトのバインディングがある場合、1つの文字を2つのキーストロークで置き換えるのと同様に、最初の回答に100の報奨金を約束します。r

4

3 に答える 3

7

私にとって、i <Char> Esc(修飾キーなしの3つのキーストローク)はかなり短く、組み込みです。これを2回のキーストロークに減らすカスタムマッピングをすでに発見しました。また、私はあなたのものから始めて、時間をかけて私のニーズに合うようにそれをより高度にし、カーソル位置またはその後に単一のスペースを挿入するためのマッピングバリアントを追加しました。

おそらく、キースペース(特にシフトされていない単一のキーの場合)は非常に限られているため、組み込みのコマンドはありません。これはそのようなプライムスペースを正当化するものではなく、マルチキーの代替手段(で始まるVimのようなg)は次のようになります。効率の面では価値がありません。

于 2013-02-28T10:29:41.643 に答える
6

いいえ。そのためのデフォルトのキーバインドはありません(:viusage通常モードのコマンドの完全なリストを表示するために実行してください)。

理由を知りたい場合は、ブラム・ムールナーまたはビル・ジョイに尋ねる必要があります。恐れ入ります。

しかし、ここにアイデアがあります:rそしてsカーソルの下の文字に取り組みます。彼らが行うことはかなり制限されており、一次元ですが、あなたのコマンドはどのように機能しますか?

現在の文字の前にiその単一の文字を挿入するように機能しますか、それとも現在の文字のにその単一の文字を挿入するように機能しますか?a

「テキストの挿入」は現在の文字のまたはに発生する可能性があるため、1つの文字をすばやく挿入するには、2つのコマンドがi必要ですa

これは問題をもう少し複雑にします。

すべてのアルファベットキーがすでに使用されているので、どのキーを使用する必要がありますか?<C-something><C-i>取られ、<C-a>また取られます。<C-S-i>そして<C-S-a>、両方とも非実用的であり、どこでも動作することが保証されていないので、何ですか?<M-something>?どこでも機能するわけではありません。多分2文字のマッピング?しかし、どれがどのニーモニックロジックに従うのでしょうか?

于 2013-02-28T10:37:48.430 に答える
2

私もこの質問に苦労し、インターネットのどこかでこれをした人を見つけました(どこか思い出せません):

:nnoremap s :exec "normal i".nr2char(getchar())."\e"<CR>

カウントに対応していないので完璧ではありませんが.、今使っていると繰り返すことができるので、他のユーザーも満足するかもしれません。

于 2015-05-21T09:50:59.797 に答える