2016-08-30 95 views
0

我最近開始使用Vim作爲我的主編輯器,而不是像Atom/VSCode這樣的程序。我添加了一些領導者映射來簡化我經常做的任務,但我遇到了其中一些問題。Vim命令映射「複製到剪貼板」不起作用

在可視化模式下,我希望能夠按<Space>y將當前選擇複製到剪貼板(+ register)。我已驗證我可以通過進入可視模式,選擇我想要的文本並按"+y手動執行此操作。然而,我的映射似乎並沒有工作: vmap <Leader>y "+y

我把我的領導方式如下: map <Space> <Leader>

我做這種方式,這樣,當showcmd設置,我得到了運營商的可視指示器待機模式。通過查看該指標,我可以看出,當按<Space>時,我確實按預期在\鍵上輸入了操作員掛起模式。然後,當我按y時,我不再處於操作員掛起模式,但我仍然處於可視模式,並沒有將選擇推送到寄存器。

爲了確保沒有一個插件與我的映射碰撞,我支持我的.vimrc和一個僅具有下列內容取代了它:

set showcmd 
map <Space> <Leader> 
vmap <Leader>y "+y 

做這些鍵中的一個需要逃脫?還是我在做其他事情?

(我目前在Windows上運行Ubuntu擊的Vim 7.4版本)。

僅供參考,我從這篇文章的想法(並使用相同的指令): https://sheerun.net/2014/03/21/how-to-boost-your-vim-productivity/

+1

更多的調查之後,我想也許這是猛砸在Ubuntu Windows上的怪胎。映射在Git Bash的Vim會議中按預期工作。 :/ – Paul

回答

2

謝天謝地,修復非常簡單。

map <Space> <Leader> 

不正確。正確的做法是

let mapleader=" " 

:help mapleader

    *<Leader>* *mapleader* 
To define a mapping which uses the "mapleader" variable, the special string 
"<Leader>" can be used. It is replaced with the string value of "mapleader". 
If "mapleader" is not set or empty, a backslash is used instead. Example: > 
    :map <Leader>A oanother line<Esc> 
Works like: > 
    :map \A oanother line<Esc> 
But after: > 
    :let mapleader = "," 
It works like: > 
    :map ,A oanother line<Esc> 

Note that the value of "mapleader" is used at the moment the mapping is 
defined. Changing "mapleader" after that has no effect for already defined 
mappings. 
+0

我最初讓我的領導按你說的方式設定;然而,幾天前我在Reddit上遇到了一個線程(https://www.reddit.com/r/vim/comments/2d2za5/question_about_having_spacebar_as_leader/),並將其改爲現在的方式。我暫時把它改回來驗證這不是罪魁禍首,不幸的是它不是。 – Paul

1

如何界定 ​​「領導者」 關鍵是:help mapleader下解釋。如果你想使用<Space>作爲「領頭羊」你應該做的:

let mapleader = "\<Space>" 

注意,「領頭羊」關鍵是一個特殊的鍵都沒有。隨着<Space>爲「領導者」,這兩個映射以下是完全等同:

vmap <leader>y "+y 
vmap <Space>y "+y 
+0

我解釋了爲什麼我選擇按照自己的方式設置領導者。我以前按照你所說的方式設定了我的領導者;但是,結果是我的\鍵未被使用,並且showcmd實際上是無用的。我只是將它改回了你已經定義的方式,並仍然存在相同的問題。 – Paul