[vim ] 把游標位置上的「字」寫出去給外部程式?

作者: cuello (cuello)   2021-07-22 19:25:52
Hi,
我在 .vimrc 裡這麼做
map <C-j> :.,/^[ \t]*$/ w !<外部程式><CR><CR>
就是定義 [Ctrl]-[J] 把 buffer 遊標所在那一行開始往後
把整段(直到碰到空行),寫出去給外部的程式,
這個程式則由 stdin 讀入,接手處裡這幾行。
但是,我有進一步的需求,就是以上的方式是以行為單位,
問題是,可不可能只寫出去遊標所在的「那一個字」
「那一個字」可以是 "W/B" 或是 "w/b" 的「大字」或「小字」
我想過,例如,再編輯模式: B"ayW
可以把那個我要的「字」存到 named register a 去
但是,我不曉得要怎樣才能在 .vimrc 把 "a 像上面那樣
寫出去給一個外部程式
請問這可以辦到嗎?
感謝指點迷津!
作者: as23041248 (KAIKAIKAI)   2021-07-22 22:34:00
你要的是 <cword>?
作者: ssd860505da (JAGER)   2021-07-23 01:08:00
用* register? 可是某些情況會出bug,快被煩死了我後來用這兩個pluginstmux-plugins/vim-tmux-focus-eventsroxma/vim-tmux-clipboard目前沒出什麼問題
作者: as23041248 (KAIKAIKAI)   2021-07-23 04:14:00
exe "normal! viw" | exe "'<,'>write !{cmd}"
作者: bootleq   2021-07-23 08:40:00
map 裡可以用 <C-R>=expand('<cword>') 插字進去
作者: as23041248 (KAIKAIKAI)   2021-07-23 13:12:00
樓上 要寫到外部程式好像無法這樣使用
作者: siuoly (放空)   2021-07-23 22:13:00
你另外寫一個腳本測試也太辛苦了好奇是什麼情況要用stdin?我目前只用到cmd argument的情形測試<cword> 可用 :!echo <cword> 查看結果vim內建echo用法 :echo expand("<cWORD>")外部shell命令就會自己展開,我以前也踩過這坑= ="...可能你已經知道了 提醒下 map 命令裡 | 符號要改成<bar>否則vim 把 | 看成是map之後接續 新的命令我也常常弄小東西花很多時間,我常懷疑這樣時間真的有賺嗎弄出來是很爽沒錯,但可以我都盡量找現成工具來做事你辛苦哩

Links booklink

Contact Us: admin [ a t ] ucptt.com