Hi Tony, The thing is, :read! appears to be stripping ^M already, irrespective of the use of ++opts:
:read !powershell.exe Get-Clipboard :read ++ff=unix !powershell.exe Get-Clipboard :read ++ff=dos !powershell.exe Get-Clipboard To be honest, I'd expect the second one, where we specify ++ff=unix, to leave trailing ^M, but somehow that's not happening, and for your reference (after I vim -u NONE): :verbose set ff Returns 'fileformat=unix' :verbose set ffs Returns 'fileformats=unix,dos' So am I correct if I say that there is something "weird" going on with system()? I also found the following at the end of system()'s help page, but somehow the experienced behavior is not the documented one: To make the result more system-independent, the shell output is filtered to replace <CR> with <NL> for Macintosh, and <CR><NL> with <NL> for DOS-like systems. I even tried to give systemlist() a go, but each entry of the array still has that trailing ^M, so it really seems like Vim cannot properly guess the fileformat from the command output. I am really in the dark here. Thanks, On Sun, Nov 17, 2019 at 5:57 AM Tony Mechelynck < [email protected]> wrote: > On Sat, Nov 16, 2019 at 7:06 PM Matteo Landi <[email protected]> > wrote: > > > > On 11/16, Tony Mechelynck wrote: > > >On Windows, when you read a file in Vim and every (or almost every) > > >line ends with ^M, it usually means that the last line lacks an > > >end-of-line, which made Vim read the whole file as if it were a Unix > > >file. This is how I would fix such a file: > > > > > > :new ++ff=dos filename.ext > > > :wq > > > > > >(this has the side-effect of opening then closing a new window for > > >that file) — see ":help ++opt". > > >Reading the file with 'fileformat' explicitly set to dos forces both > > >CR+LF or LF alone (or nothing at end of file) to be recognised as > > >ends-of-lines. Writing the file (which still has 'fileformat' set to > > >dos) writes a proper CR+LF Dos/Windows end-of-line at the end of every > > >line including the last one, so the next time you read it it will be > > >recognised as a Windows file and you won't see those pesky ^M (i.e. > > >carriage-return) characters (they are still there but they are part of > > >the normal Dos/Window end-of-line). > > > > > >Or if you want to transmit the file to be read on a Unix system, you > > >can replace :wq by :wq ++ff=unix — in that case all lines will get a > > >proper LF-only Unix end-of-line, which both Vim (on any platform) and > > >any Unix program will be able to recognise properly. In this case the > > >^M characters are not even there so no one will see them. > > > > > > > Thanks Tony for your reply, but I am afraid I did not properly explain > > myself earlier, apologies. > > > > The actual problem I dealing with is trailing ^M when reading from the > > OS clipboard; I started with dumping trailing \r\n data on a file only > > to make it easier for people to reproduce my problem, but ultimately I > > need to figure out how to read from the clipboard without having ^M > > added at the end of each line. > > > > So, going back to my experiments, can anyone suggest why, the following > > strips trailing ^M: > > > > :read! powershell.exe Get-Clipboard > > > > While this one instead, doesn't? > > > > :let @@ = system('powershell.exe Get-Clipboard') | exe 'normal p' > > > > Also, for those who might wonder: reading from the */+ registers > > unfortunately is not an option, as I am trying build a mini-plugin > > around "cb" (https://github.com/iamFIREcracker/cb) which is a script > > that can work via ssh too where you don't have access to the OS > > clipboard; anyway, this is the reason why I am trying to read the > > content of the OS clipboard by using a command, `powershell.exe > > Get-Clipboard`, instead of using the */+ register. > > > > Let me know if this makes things a little more clear. > > > > Thanks. > > > > -- > > Matteo Landi > > https://matteolandi.net > > My previous answer still applies to this usecase. > > As the documentation for :read says, this command accepts a ++opt > modifier, even when used with an !external command. > > I expect that > > :read ++ff=dos !powershell.exe Get-Clipboard > > (with the ++ff= modifier before the exclamation mark) will give you > the result you want, without the ^M characters. Try it, then tell us > if it works. > > Best regards, > Tony. > > -- > -- > You received this message from the "vim_use" maillist. > Do not top-post! Type your reply below the text you are replying to. > For more information, visit http://www.vim.org/maillist.php > > --- > You received this message because you are subscribed to the Google Groups > "vim_use" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/vim_use/CAJkCKXvV7bzJfAGK%2BhnMmwqutb-Pee3gs1yv%3DKepK7929AL%3DDg%40mail.gmail.com > . > -- -- You received this message from the "vim_use" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_use" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/vim_use/CAKpQHWZWnAZg86ey-1xcBhenW4tTCe8Y-vvR3DXkxS_5LYnr3A%40mail.gmail.com.
