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

看板Editor (編輯器(vim/emacs))作者 (放空)時間3年前 (2021/07/23 21:54), 3年前編輯推噓6(6011)
留言17則, 3人參與, 3年前最新討論串2/2 (看更多)
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

07/24 01:46, 3年前 , 1F
哈哈,結果你忘了去試後面加 |xless
07/24 01:46, 1F

07/24 01:53, 3年前 , 2F
我當然也試過 echo, 但是是在"裡面"試 :echo <cword>
07/24 01:53, 2F

07/24 01:53, 3年前 , 3F
它並沒有幫我把 <cword> expand 開來
07/24 01:53, 3F

07/24 01:53, 3年前 , 4F
而且好像也沒有成功寫出去,還是有什麼錯誤的
07/24 01:53, 4F

07/24 01:53, 3年前 , 5F
現在,你用的是"外面"的 echo, 它 expand 開來了!
07/24 01:53, 5F

07/24 01:56, 3年前 , 6F
第三種,就等明天清醒一點在來好好地端個詳
07/24 01:56, 6F

07/24 01:57, 3年前 , 7F
再,再,再
07/24 01:57, 7F

07/24 20:47, 3年前 , 8F
抱歉,前面是我,躺在床上,案到家人的帳號 :)
07/24 20:47, 8F

07/24 20:49, 3年前 , 9F
結果第三種也很好用,更乾淨,沒有 Press ENTER 那一行
07/24 20:49, 9F

07/24 20:52, 3年前 , 10F
因為用 (2) 我前面要插入 silent 後面要加 <cr><c-l> 重畫
07/24 20:52, 10F

07/24 20:53, 3年前 , 11F
變成 :silent !echo "<cWORD>" \|viewer <cr><cr><c-l>
07/24 20:53, 11F

07/24 21:13, 3年前 , 12F
忘了講,我現在改用 nnoremap <leader>鍵 : silent....
07/24 21:13, 12F

07/25 01:21, 3年前 , 13F
對唉 我沒想到用 | 來送stdin, 這招好用
07/25 01:21, 13F

07/25 01:23, 3年前 , 14F
我剛剛才發現用silent加shell命令,畫面會亂掉
07/25 01:23, 14F

07/25 01:26, 3年前 , 15F
在background跑程式,system()是我唯一知道的辦法
07/25 01:26, 15F

07/25 01:27, 3年前 , 16F
當然還是會block住,只是畫面不用刷新
07/25 01:27, 16F

07/25 01:27, 3年前 , 17F
有幫到你就好 (讚
07/25 01:27, 17F
文章代碼(AID): #1W-ieJoY (Editor)
文章代碼(AID): #1W-ieJoY (Editor)