8

カーソルの上の文字または単語をすぐにコピーして、現在の位置に貼り付けるコマンドがあるのだろうか?

例:

sig1   : in   std_logic;
sig2   : in   std_logic;
sig3   : ^

上記の状況を考えてみましょう。私のカーソルはその位置にあります。複製して現在の位置に貼り付け^たいと思います。in std_logic;私が知っている方法は次のとおりです。

1. Move cursor up
2. Go into visual mode and highlight
3. Yank
4. Move cursor down
5. Paste

これを行う簡単な方法はありますか?それとも、シーケンス全体を実行するマッピングを vimrc に書き込むという唯一のオプションが残っていますか?

編集:インターネットでマッピングを見つけました:

imap <F1> @<Esc>kyWjPA<BS>
nmap <F1> @<Esc>kyWjPA<BS>
imap <F2> @<Esc>kvyjPA<BS>
nmap <F2> @<Esc>kvyjPA<BS>

しかし、グレッグの解決策の方が簡単なようです!

4

2 に答える 2

11

Ctrl+Y挿入モードでは、前の行の対応する文字位置から文字をコピーするために使用できます。キーを押したまま、キーボードのリピートが行末に到達するのを待ちます。

于 2012-11-19T02:19:18.290 に答える
6

グレッグの答えは的を射ていますが、ワークフローでより役立つことがわかったので、単語ごとにコピーするようにctrl+を変更しました。y私の~/.vimrcファイルには次のものがあります。

inoremap <expr> <c-y> pumvisible() ? "\<c-y>" : matchstr(getline(line('.')-1), '\%' . virtcol('.') . 'v\%(\k\+\\|.\)')

:h ins-completion-menu基本的に、この表現マッピングは、挿入補完メニュー ( を参照) が表示されていない場合、上記の行から単語をコピーします。このケースをチェックすると、現在の完了を受け入れ、完了モードを終了できます ( を参照:h complete_CTRL-Y)。

挿入完了メニューが表示されない場合は、次のようになります。

  • getline(line('.')-1)前の行を返します
  • virtual('.')現在の位置 列の位置
  • '\%' . virtcol('.') . 'v\%(\k\+\\|.\)'カーソル位置または任意の文字から単語に一致
  • matchstr()パターンに一致する前の行の一致部分を返します。

詳細については、次を参照してください。

:h :map-<expr>
:h pumvisible(
:h matchstr(
:h getline(
:h line(
:h virtcol(
:h /\%v
:h /\k
于 2012-11-19T03:46:04.497 に答える