2012-10-22 44 views
1

我想創建一個樣式命令/宏來將我當前未命名的yank寄存器(或者如果必須的話)粘貼到外部命令。如何將yank寄存器發送到外部命令

我當前的用例是將行發送到剪貼板。儘管將來我想用相同的技術將文本發送到其他程序。

對於剪貼板,作爲Mac用戶,我通常會將*添加到我的剪貼板,但我也是Tmux用戶,所以這不起作用。我必須改用reattach-to-user-namespace命令。我想要發生的是將註冊管道註銷到reattach-to-user-namespace -l bash -c pbcopy

+2

該命令應該添加到你的'〜/ .tmuxconf'中:不需要管道。我相當肯定''* y'在我的Mac上工作在tmux上。 – romainl

+0

可能類似的帖子:http://stackoverflow.com/questions/12414745/send-echo-or-register-contents-to-pbcopy -mac-clipboard-on-mac-os-x/12415965 –

+0

不是重複的文章,我正在嘗試輸出一個外部命令的Yank寄存器。這一次恰好發生,我想'pbcopy'。將來我會使用相同的命令來管道「紅寶石」。 – Jason

回答

0

正如romainl所述,通過將命名空間命令放入您的tmux.conf中,您不需要執行此操作,但是如果您確實想將寄存器的內容傳送到外部命令,則可以使用getreg()來檢索其內容和exe執行該命令。例如...

:exe "!pipereg ".getreg('"')." | pbcopy" 
0

如果通過reattach-to-user-namespace包裝推出的炮彈(我爲包裝的文檔中描述),他們的孩子將被連接到用戶引導命名空間,所以你不會有在您的個人呼叫中使用它(例如)pbcopypbpaste

或者,您可以通過包裝器運行Vim的實例,以使其(及其子)訪問引導程序名稱空間。這樣,你應該可以使用*寄存器(如果你有Vim 7.3編譯的+clipboard功能,即幾乎任何版本的Vim除OS X之外的版本)。

reattach-to-user-namespace vim … 
# use "* inside Vim to access the OS X clipboard. 

如果你真的想避免運行的包裝,除了需要它(例如pbcopy),那麼你可以使用Vim的system()功能的最終處理。這也是你會怎麼一般一些內部對Vim的數據發送到任何(非交互式)外部命令:

:call system('reattach-to-user-namespace pbcopy', getreg('')) 

你可能要打包這是一個新的命令(這樣就可以更容易地使用它有不同的寄存器):

command -bar -register Pbcopy call system('reattach-to-user-namespace pbcopy', getreg(<q-reg>)) 

這個新的命令可以這樣(參數是註冊名稱):

:Pbcopy " 
:Pbcopy a 

你可以走一步,並調用映射命令:

nnoremap <F3> :<C-u>execute 'Pbcopy ' . v:register<CR> 

你會通過鍵入F3使用「一個F3(即帶有寄存器前綴,就像任何其他使用寄存器的正常模式命令一樣)。