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 像上面那样
: 写出去给一个外部程式
: 请问这可以办到吗?
: 感谢指点迷津!