【问题标题】:Windows command prompt set clipboard without trailing newlineWindows 命令提示符设置剪贴板不带尾随换行符
【发布时间】:2022-10-01 15:44:33
【问题描述】:

我需要一个命令,将剪贴板的内容设置为通过管道传输到其输入的任何内容,而无需添加尾随换行符。以下:

C:> *some_command* | clip.exe

在末尾添加换行符,同时:

C:> *some_command* | powershell.exe Set-Clipboard

似乎没有将标准输入传递给Set-Clipboard。不能通过 powershell 提示调用 *some_command*。我怎样才能做我需要的?

背景:我正在使用 WSL,我希望能够从 vim、tmux 等复制/粘贴到系统剪贴板。我当前的解决方法是使用 clip.exe,它会在我拉出的任何内容中添加一个换行符。例如,在.vimrchave

let g:copy = \'clip.exe\'
let g:paste = \'powershell.exe Get-Clipboard -Raw\'
augroup myYank
  autocmd!
  autocmd TextYankPost * if v:event.operator == \'y\' | call system(g:copy, @\") | let g:lastyank=\'y\' | else | let g:lastyank=\'\' | endif
  \"autocmd TextYankPost * if v:event.operator ==# \'y\' | call system(g:copy, @\") | endif
  \"autocmd TextYankPost * call system(g:copy, @\")
augroup END
function! Paste(mode)
  if g:lastyank == \'y\'
    let @\" = system(g:paste)
  endif
  return a:mode
endfunction
map <expr> p Paste(\'p\')
map <expr> P Paste(\'P\')
\" map Ctrl-c and Ctrl-x as expected
func! GetSelectedText()
  normal gv\"xy
  let result = getreg(\"x\")
  return result
endfunc
noremap <C-c> :call system(g:copy, GetSelectedText())<CR>
noremap <C-x> :call system(g:copy, GetSelectedText())<CR>gvx

    标签: clipboard windows-subsystem-for-linux


    【解决方案1】:

    在变量中输出您的命令,然后使用$var.trim() | Set-Clipboard,但最好是先生成正确的输出,而不是在一行中更正它,这样字符串生成器可能会帮助您。

    $SB = [System.Text.StringBuilder]::New()

    然后你可以根据你想要的结果尝试这个,字符串生成器会将所有内容存储在它对应的变量中。

    $SB.Append($Text)

    $SB.AppendLine($Text)

    然后终于

    $SB | SCB

    有时也

    Out-String -NoNewLine

    可以提供帮助,但某些命令默认情况下会在末尾生成空行,因此修剪有时会派上用场。

    【讨论】:

    • 我建议不要在答案中使用修辞问题。他们冒着被误解为根本不是答案的风险。您正在尝试回答此页面顶部的问题,不是吗?否则请删除此帖。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-31
    • 2011-05-20
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 2012-12-20
    相关资源
    最近更新 更多