作者:
siuoly (放空)
2021-07-23 21:54:251. '<,'>{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 像上面那樣
: 寫出去給一個外部程式
: 請問這可以辦到嗎?
: 感謝指點迷津!
作者: immerftp (immer) 2021-07-24 01:46:00
哈哈,結果你忘了去試後面加 |xless我當然也試過 echo, 但是是在"裡面"試 :echo <cword>它並沒有幫我把 <cword> expand 開來而且好像也沒有成功寫出去,還是有什麼錯誤的現在,你用的是"外面"的 echo, 它 expand 開來了!第三種,就等明天清醒一點在來好好地端個詳再,再,再