Re: [vim ] 把光标位置上的“字”写出去给外部程式?

楼主: siuoly (放空)   2021-07-23 21:54:25
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 像上面那样
: 写出去给一个外部程式
: 请问这可以办到吗?
: 感谢指点迷津!
作者: immerftp (immer)   2021-07-24 01:46:00
哈哈,结果你忘了去试后面加 |xless我当然也试过 echo, 但是是在"里面"试 :echo <cword>它并没有帮我把 <cword> expand 开来而且好像也没有成功写出去,还是有什么错误的现在,你用的是"外面"的 echo, 它 expand 开来了!第三种,就等明天清醒一点在来好好地端个详再,再,再
作者: cuello (cuello)   2021-07-24 20:47:00
抱歉,前面是我,躺在床上,案到家人的帐号 :)结果第三种也很好用,更干净,没有 Press ENTER 那一行因为用 (2) 我前面要插入 silent 后面要加 <cr><c-l> 重画变成 :silent !echo "<cWORD>" \|viewer <cr><cr><c-l>忘了讲,我现在改用 nnoremap <leader>键 : silent....
楼主: siuoly (放空)   2021-07-25 01:21:00
对唉 我没想到用 | 来送stdin, 这招好用我刚刚才发现用silent加shell命令,画面会乱掉在background跑程式,system()是我唯一知道的办法当然还是会block住,只是画面不用刷新有帮到你就好 (赞

Links booklink

Contact Us: admin [ a t ] ucptt.com