挿入モードに入ることなく、カーソルがVimにあるときに改行を挿入できますか?次に例を示します([x]
はカーソルがx
にあることを意味します):
if (some_condition) {[ ]return; }
時々、さらにコードを入力したい場合があります。を押します i 挿入モードに入るには、を押します Enter 改行を挿入してから余分なスペースを削除します。次に、通常モードに入り、右中括弧の前にカーソルを配置してから、同じことを実行して独自の行にします。
私はこれをしばらくやっていますが、それを行うより良い方法は確かにありますか?
あなたが与えた例では、あなたは使用することができます rEnter 単一の文字(スペース)をEnterで置き換えます。次に、 fspace. 次のスペースに進み、最後のコマンドを繰り返します。
自動インデント設定に応じて、上記はreturnステートメントを適切にインデントする場合としない場合があります。そうでない場合は、使用します sEnterTabEsc 代わりに、スペースを改行で置き換え、行をインデントし、挿入モードを終了します。 「。」を使用できないように、2番目のスペースを別のコマンドに置き換える必要があります。この場合。
挿入モードでnotを押しながら「g」を押すと、カーソルに改行を挿入するマクロを作成する方法は次のとおりです。
Vimから、次を入力します。
:map g i[Ctrl+V][Enter][Ctrl+V][Esc][Enter]
どこ:
最後のEnterキーを押すまで、vimウィンドウの下部に次が表示されます。
:map g i^M^[
説明:
[Ctrl + V]は「次の文字を引用する」ことを意味します-コマンドに改行とエスケープ文字を埋め込むことができます。
したがって、「g」キーをシーケンスにマッピングしています。
i [Enter] [Escape]
これはカーソルの前に改行を挿入し、挿入モードを終了するためのvimです。
調整:
f}i^M^[O
-これはf indを}およびi別の改行を挿入し、挿入モードから脱出し、[〜# 〜] o [〜#〜]コードを追加するために空の行をペンします。楽しい!
Ctrl + Enterを押してカーソル位置で行を分割する簡単なマッピング:
:nmap <c-cr> i<cr><Esc>
基本的に「挿入」モードに入り、改行を挿入して通常モードに戻ります。
将来使用するために.vimrcファイルに入れてください。
通常、1行のブロックを3行に拡張する場合は、置換を試してください。開始ブラケットをブラケット/リターンに変更し、終了ブラケットをリターン/ブラケットに変更します。
ブラケットをブラケット/リターンに置き換えるコマンドは次のようになります。
:s/{/{\r/
これを頻繁に使用したいので、次のようにシーケンス全体を未使用のキーストロークにマッピングできます。
:map <F7> :s/{/{\r/ ^M :s/}/\r}/ ^M
シーケンスで^ Mが表示されている場合は、[Ctrl-V]と入力し、enterを押します。
サンプル行の任意の場所にカーソルを置いて、マップされたキーを押すと、改行が追加されます。
小切手 :help map-which-keys
未使用のキーストロークを選択してマップするためのアドバイス。
K
を他の何かにマッピングして(好みの別のキーを選択して)マーカー'
一時的なマーカーとして大丈夫なのはなぜですか?
:nmap K m'a<CR><Esc>`'
改行を発生させたい文字の上で通常モードでKを押すと、行が分割され、カーソルがあった場所に残ります。
autoindent
(または他のインデント補助)が有効なときに行を2つに分割すると、Vimはカーソルの右側の空白を自動的に削除します。
これらの設定を使用しない場合は、s
の代わりにi
を使用して、 s挿入するだけでなく、新しいテキストを空白に置き換えます。 (空白が複数ある場合は、カーソルを左端に置き、代わりにcw
を使用します。)
これは、J
と反対の動作を期待するものの最も忠実な実装であることがわかりました。
nnoremap S i<cr><esc>^mwgk:silent! s/\v +$//<cr>:noh<cr>`w
カーソルの位置で単純な新しい行を作成し、前の行の末尾の空白があればそれを処理してから、カーソルを正しい位置に戻します。
i<cr><esc> -これは推奨される最も一般的なソリューションの1つです。カーソルの下の空白以外の文字は削除されませんが、末尾の空白も残ります。
^mw -新しい行の先頭に移動して、w
の下にマークを作成します
gk -1行上に移動します
:silent! s/\v +$//<cr> -正規表現は行末の空白を置き換えます
:noh<cr> -正規表現がオンになっている可能性があることを強調表示する検索をクリアします
`w -w
の下のマークを返します
両方の長所を本質的に兼ね備えています r<esc><cr> そして i<cr><esc>
注:私はこれをバインドしています S 潜在的に便利なキーを上書きしますが、それは次の同義語です cc 分割するほど頻繁に使用しないので、上書きしても大丈夫です。
Vimrcでこのキーマッピングを設定します
:map <C-m> i<CR><Esc>h
Vimで使用する場合は、Ctrl + mを押します。
入力がある場合:
aaa bbb ccc ddd
出力したい
aaa
bbb
ccc
ddd
次のコマンドを使用できます
f r<ENTER>;.;.
私見、組み込みマッピングgs
は有用なマッピングではありません(vimをスリープ状態にします)。これを分割に使用できます。
nmap gs i<CR><ESC>
Vrapper では、挿入モードに入らずに行を分割するgqlを使用できますが、インデントが常に維持されるとは限りません。
基本的に、行を分割するときは、単にキャリッジリターンを挿入するか、スペースを使用している場合はキャリッジリターンに置き換えます。さて、なぜどちらかで解決するのでしょうか? Kのマッピングは次のとおりです。
_"Have K split lines the way J joins lines
nnoremap <expr>K getline('.')[col('.')-1]==' ' ? "r<CR>" : "i<CR><Esc>"
_
三項演算子を使用して、2つのアクションを1つのキーマップに凝縮します。それを分解すると、_<expr>
_はキーマップの出力が動的であり、この場合getline('.')[col('.')-1]==' '
という条件に依存することを意味します。最後に、使い慣れた三項演算子_? :
_はスペースを改行(_r<CR>
_)に置き換えるか、新しいものを挿入します(_i<CR><Esc>
_)
これで、J
コマンドへの素敵な姉妹キーマップができました。
実際、次の複合操作が必要です。
:
コマンドモードに入るs/\s/\r/g