作者siuoly (放空)
看板Editor
標題Re: [vim ] 把游標位置上的「字」寫出去給外部程式?
時間Fri Jul 23 21:54:25 2021
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 像上面那樣
: 寫出去給一個外部程式
: 請問這可以辦到嗎?
: 感謝指點迷津!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 219.85.141.196 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Editor/M.1627048467.A.CA2.html
※ 編輯: siuoly (219.85.141.196 臺灣), 07/23/2021 22:05:48
※ 編輯: siuoly (219.85.141.196 臺灣), 07/23/2021 22:09:09
推 immerftp: 哈哈,結果你忘了去試後面加 |xless 07/24 01:46
推 immerftp: 我當然也試過 echo, 但是是在"裡面"試 :echo <cword> 07/24 01:53
→ immerftp: 它並沒有幫我把 <cword> expand 開來 07/24 01:53
→ immerftp: 而且好像也沒有成功寫出去,還是有什麼錯誤的 07/24 01:53
→ immerftp: 現在,你用的是"外面"的 echo, 它 expand 開來了! 07/24 01:53
推 immerftp: 第三種,就等明天清醒一點在來好好地端個詳 07/24 01:56
→ immerftp: 再,再,再 07/24 01:57
推 cuello: 抱歉,前面是我,躺在床上,案到家人的帳號 :) 07/24 20:47
→ cuello: 結果第三種也很好用,更乾淨,沒有 Press ENTER 那一行 07/24 20:49
推 cuello: 因為用 (2) 我前面要插入 silent 後面要加 <cr><c-l> 重畫 07/24 20:52
→ cuello: 變成 :silent !echo "<cWORD>" \|viewer <cr><cr><c-l> 07/24 20:53
推 cuello: 忘了講,我現在改用 nnoremap <leader>鍵 : silent.... 07/24 21:13
→ siuoly: 對唉 我沒想到用 | 來送stdin, 這招好用 07/25 01:21
→ siuoly: 我剛剛才發現用silent加shell命令,畫面會亂掉 07/25 01:23
→ siuoly: 在background跑程式,system()是我唯一知道的辦法 07/25 01:26
→ siuoly: 當然還是會block住,只是畫面不用刷新 07/25 01:27
→ siuoly: 有幫到你就好 (讚 07/25 01:27