1. '<,'>{cmd}
我測試過用write,yank,外部命令輸出,都是整行,不是你的需求。
2. <cWORD> 用法如下:
: !echo <cWORD> #輸出游標下的word
這是作為commnd argument,不是你的stdin需求
3. system() 用法如下
:echo system( "cat ", "stdin's something....." )
system()執行命令,並且把第二個參數作為stdin輸入給命令。回傳stdout輸出。
如果用call system(..) 則看不到command 的stdout結果。
所以你可以用
map <c-j> :echo system( "命令" , expand("<cWORD>") )<cr>
來使用stdin。
參考:
:help :execute
:help <cWORD>
:help system()
stackoverlflow: How do I send the current buffer or line as stdin to system() in vim?
https://stackoverflow.com/q/21530456/12506676
※ 引述《cuello (cuello)》之銘言:
: Hi,
: 我在 .vimrc 裡這麼做
: map <C-j> :.,/^[ \t]*$/ w !<外部程式><CR><CR>
: 就是定義 [Ctrl]-[J] 把 buffer 遊標所在那一行開始往後
: 把整段(直到碰到空行),寫出去給外部的程式,
: 這個程式則由 stdin 讀入,接手處裡這幾行。
: 但是,我有進一步的需求,就是以上的方式是以行為單位,
: 問題是,可不可能只寫出去遊標所在的「那一個字」
: 「那一個字」可以是 "W/B" 或是 "w/b" 的「大字」或「小字」
: 我想過,例如,再編輯模式: B"ayW
: 可以把那個我要的「字」存到 named register a 去
: 但是,我不曉得要怎樣才能在 .vimrc 把 "a 像上面那樣
: 寫出去給一個外部程式
: 請問這可以辦到嗎?
: 感謝指點迷津!