視覚的な選択をキーボードにコピーした後、元の場所に戻ります


18

突然、その段落をコピーする必要があると判断したときに、カーソルが段落の中央にあります。

開始

そこでvip、視覚的に入力して段落を選択します。

選択された

今、私はcmd+Cクリップボードにコピーするためにヒットします(これはシステムによって異なる場合がありますが、私の投稿の中心的な質問に関連するべきではありません)。

最後の

目的の位置ではなく、私が始めたときの位置です。

で選択を非視覚的にヤンクすると同じ問題が発生することに注意してくださいyip

このような選択/コピーアクションを実行した後、デフォルトの動作を「元のカーソル位置に戻す」ようにしたいと思います。これを可能にする構成はありますか?


11
うん、これも迷惑だ。私はちょうどその目的のためのマークを使用する傾向がある:mm "+yap `m(注"+yお使いのシステムのクリップボードにヤンク)
fruglemonkey

3
カーソルをヤンクゾーンの先頭または末尾に配置すると便利です。結局のところ、ヤンクしたテキストとその中のカーソルを使って、私は今何ができますか?今すぐ貼り付け/貼り付けを行うのはあまり意味がありません。しかし、後でそれをしたい場合は、後でヤンクすることもできます...おそらくあなたが今必要なのは単なるマークです。
ヴァンレーザー

回答:


14

可能な解決策は、ジャンプを使用することです:

ヤンクまたは視覚的に選択する前に、カーソルが移動した後にアクセスできる新しいジャンプを設定できます。そのためにはを使用しますm`

次にctrlo、ジャンプリストに戻るためにヤンクを使用したためにカーソルが移動した後。また、使用可能なジャンプの:jumpsリストを表示しctrloたり、このリストをナビゲートしたりできます。ctrli

ワークフローを要約すると、次のようになります。

  • m`
  • yip
  • ctrlo

を使用m` するとマークが設定されるため、の``代わりににジャンプできますctrlo

あなたは読むことができます:h mark-motionsし、:h :jumpsより多くの情報のため。


私はこれが好き。ジャンプするとき、一重引用符を一般的にバックティックのように動作させる方法はありますか?...単一引用符はタイプが容易であり、通常、私は正しい列位置だけでなく、右の行にジャンプしたい
ヨナ

1
@Jonah、私はにマップ<leader>'します`。(私は<space>私のリーダーとして使用します。)
ヌメリは、モナカの復活を

@Jonah:ヌメリが言ったように、マッピングは良い解決策になる可能性があります。さもなければ、バックティックを取り除きたいなら、を見ることができます:h 'langmap'。私はそれが理想的な解決策だと言っているわけではありませんが、おそらくあなたにとって興味深いかもしれません。
statox

@Johah、私は実際にシングルクォートとバックティックを交換しnoremap ' ` noremap ` 'ます...これは私のvimrcにあり、素晴らしい作品です
ニコ・ベリック

10

次の方法でカーソルの移動を回避できます。

:'{,'}y

参照してください:help range:help mark-motions:help :y


1
知っておくといいのですが、それはあなたが実際にやることですか?これは、マークのソリューションよりも、これは困難になり、2つのブラケットで、8 keystrakesを入力しているようだ
ヨナ

それは私が何だろう、私はあなたの位置にあった場合の対処します。しかし、私はあなたが説明する振る舞いに問題がないので、実際にはそれをしません。
ロメインル

2
@Jonahマッピングを作成するオプションはまだあります。そのような何か:nmap <key> :'{,'}y<CR>が仕事をする必要があります。
statox

10

カーソルが段落の中央にあります

編集したばかりの場合、最も簡単な解決策はg ;、カーソルを最後の編集位置に配置することです。

また、段落を編集していない場合は、実際に何も編集せずに、編集中の「イベント」をトリガーするためにh、あなたがいる同じ文字(たとえば、あなたがオンになっている、あなたが入力するrh)で簡単な置換操作を行うことができます。


2
1:私はいつも使用し'.、との最後の変化の間を移動するのは非常に便利ですg;g,
mMontu

2
g;正しい列の位置に移動するバージョンもありますか?
ヨナ

@Jonahはデフォルトの動作です。それはあなたのために働いていませんか?常に正しい列と行の位置に移動します。
Al.G.

4

VIM-easyclipプラグインは、このための設定があります:

g:EasyClipPreserveCursorPositionAfterYank-デフォルト0(無効)。Vimのデフォルトの動作は、カーソルをヤンクされたテキストの先頭に配置することです。これは、他のモーションと一致しています。ただし、ヤンクを実行するときにカーソル位置を変更しない場合は、このオプションを有効にします。

この小さな機能のためだけにプラグイン全体をインストールするのは少し大変なので、コメント通りにマークを使用することを好みます。


0

Al.G.の答えを拡張すると、編集せずに必要な場所に移動できます。解決策はgiです。以前の最後の挿入モードにあった同じ位置に到達します。

  • あなたは段落の真ん中にいます。
  • 挿入モードに切り替えます。
  • 通常モードに切り替えます。
  • を押しvipます。
  • を押しgiます。
  • 通常モードに切り替えます。(gi挿入モードのままにします)

ハイライトされたテキストの開始または終了に行きたい場合。

 :help v_o 

強調表示されたテキストをヤンクすると、通常モードに戻り、元のカーソル位置を保持する場合と保持しない場合があります。

  1. 高いカーソル位置から低いカーソル位置(低い行列番号から高い行列番号へ)から強調表示を開始する場合、押すと元のカーソル位置を保持します。 y
  2. ハイライトがより低いカーソル位置からより高いカーソル位置まで始まる場合、カーソルは現在の位置に残ります。

ヤンクした後に元の場所に戻る:
gv前のハイライトを取得します。

キー
oまたはを使用して、ビジュアルモードで元の場所と現在の場所を切り替えることができますO

ステータス行の行番号と列番号は、正確なカーソル位置を知るのに役立ちます。
ドキュメンテーション:

:help visual-change

これはvip、カーソルが段落の途中で始まる場合には機能しません。
アントニー

ああ、気づかなかったので、今は答えを削除するのではなく編集します。
vusan

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