사용자 정의 g : clipboard 결과`p`는 항상 같은 줄에 붙여 넣습니다.

Aug 20 2020

배경

나는 wayland와 neovim을 사용하며 외부 텍스트를 붙여 넣을 때 ^M각 줄의 끝에 추가 됩니다. 이것은 알려진 "버그"(https://github.com/neovim/neovim/issues/10223) 해결 방법이 있습니다. sed를 사용하여 다음을 트리밍합니다 ^M.

let g:clipboard = {
            \   'name': 'WL-Clipboard with ^M Trim',
            \   'copy': {
            \      '+': 'wl-copy --foreground --type text/plain',
            \      '*': 'wl-copy --foreground --type text/plain --primary',
            \    },
            \   'paste': {
            \      '+': {-> systemlist('wl-paste --no-newline | sed -e "s/\r$//"')}, \ '*': {-> systemlist('wl-paste --no-newline --primary | sed -e "s/\r$//"')},
            \   },
            \   'cache_enabled': 1,
            \ }

Neovim 이 설정되지 않은 wl-paste경우 내 시스템에서 기본적으로 g:clipboard설정됩니다.

문제

해결 방법이 있으면 neovim은 줄 바꿈에 줄 단위 복사본을 붙여 넣지 않습니다.

  • 예상되는 동작 : 줄 이동-> 누름 Y-> 다른 줄 중간으로 이동-> 누름 p-> 복사 된 줄이 줄에 붙여 넣어 집니다. 이것은 no g:clipboard 가 설정 되었을 때 일어나는 일 입니다.

  • 관찰 된 동작 : 행 이동-> 누르기 Y-> 다른 행 중간으로 이동-> 누르기 p-> 복사 된 행이 현재 행에 붙여 넣어 집니다 . 이 g:clipboard설정 되면 발생합니다 .

wayland 클립 보드의 내용을 관찰 할 때 ( wl-paste --no-newline | cat -A)는 동일합니다. 둘 다 LF 문자로 끝납니다.

질문:

왜 이런거야? neovim은 새로운 라인에 붙여 넣기를 구별하기 위해 무엇을하며, neovim은 왜 새로운 라인에 붙여 넣지 않습니다 g:clipboard.

답변

3 Matt Aug 20 2020 at 01:40

기본적 systemlist()으로 최종 개행을 유지하지 않습니다 (즉, 결과 목록에서 마지막 "빈 문자열"항목을 삭제합니다). 따라서 Neovim은 클립 보드의 내용이 "line"이 아닌 "char"유형이라고 생각합니다.

따라서 대신 다음을 수행해야합니다 (참조 :h systemlist(), Neovim 버전은 Vim의 버전과 다릅니다).

{-> systemlist('wl-paste...', '', 1)}

또 다른 옵션은 Neovim의 GUI 버전을 독점적으로 사용하는 경우 플랫폼 독립적 인 방식 (Qt, Gtk 등을 통해 제공 할 수있는 GUI 프론트 엔드 애플리케이션에 RPC 요청을 보내는 것)을 선호 할 수 있습니다. .).

예를 들어, nvim-qt는 GuiClipboard()기능 을 제공하는 표준 "nvim_gui_shim"플러그인과 함께 제공 됩니다. 따라서 실행하면 이미 해당 및 호출 이있는 :call GuiClipboard()"사용자 지정"이 자동으로 설정됩니다 .g:clipboardrpcrequest()rpcnotify()

그러나 일반 콘솔 nvim에서는 작동하지 않는 것 외에도 또 다른 불쾌한 문제를 발견했습니다. 적어도 nvim-qt에서는 UI가 입력되고 완전히 준비되어야합니다. 따라서 Neovim을 시작할 때 설정하는 것이 불편할 수 있습니다. 물론 g:clipboardRPC 호출을 대신 제공 할 수 있습니다 (참고 : RPC 매개 변수는 GUI 프런트 엔드마다 다를 수 있으며 일부 응용 프로그램은 이러한 요청을 전혀 구현하지 않도록 선택할 수도 있습니다).

또 다른 옵션은 클립 보드 액세스를 직접 구현하는 것입니다. 다음 은 외부 종속성없이이 작업을 수행 할 수있는 자체 Neovim 클립 보드 공급자입니다. 그러나 지금까지는 Xlib 버전 만 구현 했으므로 Wayland에 대한 기본 모듈이 없습니다.