vim에 대한 사용자 정의 인코딩을 정의 할 수 있습니까?


9

나는 종종 프로그래밍 퍼즐과 코드 골프를 사용 합니다. 저기 많은 사용자들이 순전히 골프 용으로 맞춤 언어를 작성했습니다. 나도 지금 내 일을하고있어 이러한 언어는 자체적으로 사용자 정의 인코딩이있어 더 많은 명령을 단일 바이트로 만들 수 있습니다. 예를 들어, 심각 , 젤리05AB1E .

고유 한 사용자 지정 인코딩을 사용하도록 vim을 구성 할 수 있습니까? 유니 코드 코드 포인트에 대한 바이트 매핑을 구성하고 싶습니다. 예를 들면 다음과 같습니다.

0x01 == "¢"

그런 다음 입력 <C-v><C-a>하면 ¢문자 가 표시 되고 쓰면 바이트가 저장 0x01됩니다.

원격에서도 가능합니까? 또한 시스템 클립 보드와도 잘 작동합니까? (예 : 브라우저에서 vim으로 복사하여 붙여 넣을 수 있으며 그 반대도 마찬가지입니다)


2
당신은 아마도 당신 자신의 문법 스크립트를 작성하고 사용해야 할 것 :help conceal입니다.
romainl

에 대한 빔 도움말을보고 encoding하고 charconvert이 내부적으로 사용하려고 것을 나는 보았다 iconv문자 세트를 변환하는 첫 번째 함수를. iconv다른 문자 집합 간의 변환을 처리 할 수 ​​있습니다. 문자 세트를 추가하는 방법에 대한 답변은 여기 에서 iconv확인할 수 있습니다 (관리자에게 메일을 보내야 할 것 같습니다). 아마도 이것이 도움이 될 것입니다. :)
Erwin Rooijakkers 2016 년

답변:


7

romainl이 제안했듯이 concealvim 의 기능으로 달성 할 수 있습니다 .

다음은 사용할 수있는 스크립트 예입니다.

let rules = [
      \ ['01' , '☺'],
      \ ['02' , '☻'],
      \ ['03' , '♥'],
      \ ['04' , '♦'],
      \ ['05' , '♣'],
      \ ['06' , '♣'],
      \ ['07' , '•'],
      \ ['08' , '◘'],
      \ ['^A' , '¢'],
      \ ]

for [value, display] in rules
  execute "syntax match vartest /".value."/ conceal cchar=".display
endfor

" Ensure the character is concealed
set conceallevel=2
set concealcursor=nvc

보시다시피, 나는 진지하게 매핑 하고 당신의 ^A모범을 보았습니다 . 이 코드를 복사 / 붙여 넣기 ^A하려면 입력해야합니다 <C-v> <C-A>.

이 코드의 기능은 각 value/ display쌍 마다 구문 일치를 정의 하는 것입니다.

예 :

syntax match vartest /08/ conceal cchar=◘

모든 08시퀀스와 파일을 일치 시키고 문자로 숨 깁니다 .

당신은 것입니다 볼 수 있지만 파일의 실제 텍스트입니다 08.


그런 다음 규칙 목록을 가져 와서 멋진 매크로 0i\ ['^[f s', '^[lxf)s'],^[ld$를 사용하여 각 줄을 사용 가능한 vim 배열로 변환 할 수 있습니다.

또한 vim과 함께 리터럴 유니 코드를 입력하려는 경우 다음 워크 플로우를 사용할 수 있습니다.

<C-V> u XXXX

XXXX유니 코드 값은 어디에 있으므로 입력 <C-V>u0001하면 ^A원하는대로 삽입 됩니다.


파일의 내용을 확인하려면 xxd로 가질 수있는 파일의 16 진 덤프를 사용하는 것이 좋습니다 .

예 :

$ vim

<C-V><C-A><C-V><C-B>
:x a.txt

$ xxd a.txt
0000000: 0102 0a                                  ...

당신은 여기에서 볼 수 있습니다 ^A01하고 ^B같은 02. ( 0a파일 끝에 새 줄을 나타냄)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.