macvim-dev / macvim-dev/macvim
Ability to change what happens when pasting with Cmd+v the editor while still being able to use Cmd+v to paste in dialogs
まだ誰も着手していません。
- 主要言語
- Vim Script
- スター
- 7.9k
- フォーク
- 691
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
Is your feature request about something that is currently impossible or hard to do? Please describe the problem.
I'm trying to customize paste behavior in MacVim in insert mode, to add come <C-g>u sequences to create undo points before and after the pasted text.
I can do that with an inoremap <D-v>. But in order for <D-v> to make it to the Vim input processing, it can't be bound in the MacVim menu system to the paste: action. So the folks at SuperUser suggest:
macmenu Edit.Paste key=<nop>
noremap <D-v> "*P
cnoremap <D-v> <C-r><C-o>*
inoremap <D-v> <C-g>u<C-r><C-o>*
But if you do that, then paste doesn't work in dialogs and other non-Vim UI elements insider MacVim, such as the graphical find dialog. As noted in the MacVim help on customizing the menu:
(E.g. the menu item "Edit.Paste" must be bound to the action "paste:" otherwise pasting won't work in dialogs since that is the action that instructs them to paste something.)
And I can't find any documentation on how to either change what happens when a paste: action is received by the Vim layer, or to set what happens when a <D-v> is sent to the GUI layer when it's not bound to a menu option.
So I'm not able to achieve the configuration where pressing Command+v creates undo points around the pasted text in Vim's insert mode, but also still works on text boxes in the GUI.
Describe the solution you'd like
My ideal approach would be to have paste: reach the Vim core exactly as if <D-v> were being typed, so that remapping <D-v> with inoremap would Just Work without having to unbind it from the menu item.
Describe alternatives you've considered
Other approaches would be:
- Providing a command to control what MacVim actions like
paste:do when they reach the Vim level. - Providing an option on the
macmenucommand to set key sequences to be issued in Vim before/after the action is processed. - Providing a mode-specific
map-like command to map keys in the "mode" of having a dialog box selected, so that you could<something>noremap <D-v>to:macaction paste:and have that work in the dialogs. This might be totally impossible since then Vim internals would have to process all the keypresses in the dialogs. - Documenting some already-existing way to customize what the
paste:action does by overwriting/replacing some VimScript function it already invokes.
Additional context
I only barely know enough about Vim input processing to articulate what I want to achieve, so it's possible I'm missing something obvious about how pasting works in Vim.
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
メニューのカスタマイズに関する MacVim のヘルプ、特に Edit.Paste 項目とその paste: アクションから始め、次に、そのアクションが Vim の入力処理や GUI ダイアログにどのように到達するかを追跡します。既存の macmenu、inoremap、cnoremap、macaction の動作を比較します。完了条件は、Vim の挿入モードで Cmd+V をカスタマイズでき、かつグラフィカルダイアログでも貼り付けが行われることです。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- macos, vim
- 領域
- desktop
- issue の種類
- 機能追加
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 活発さ
- 停滞
- 明瞭さ
- 説明が足りない
- 初心者へのやさしさ
- 25/100