내 문서에 다음과 같은 텍스트를 만들고 싶다고합시다.
%
% Not Important
% O ------------------------->
% |
% S |
% o |
% m |
% e |
% |
% M |
% s |
% g |
% |
% V
각 줄에 각 문자를 수동으로 삽입하지 않고도 "Some Msg"를 위와 같이 쉽게 세로로 작성하는 방법이 있습니까?
내 문서에 다음과 같은 텍스트를 만들고 싶다고합시다.
%
% Not Important
% O ------------------------->
% |
% S |
% o |
% m |
% e |
% |
% M |
% s |
% g |
% |
% V
각 줄에 각 문자를 수동으로 삽입하지 않고도 "Some Msg"를 위와 같이 쉽게 세로로 작성하는 방법이 있습니까?
답변:
정말 좋은 해결책은 아마도 더 많은 작업이 필요할 것이지만 "나쁘지 않은"것은 달성하기가 어렵지 않습니다.
각 캐릭터 다음에 한 줄 아래로 이동하기 만하면되므로 InsertCharPre
자동 명령 을 통해 그렇게하겠습니다 !
디렉토리의 .vimrc
일부 파일에 넣거나 더 나은 파일 로 넣으십시오 plugin/
.
" enters insert mode to write vertically
function! VertStart()
augroup Vert
autocmd!
" handles each entered character and moves cursor down
autocmd InsertCharPre * call feedkeys("\<left>\<down>", 'n')
autocmd InsertLeave * call VertEnd()
augroup END
inoremap <BS> <Up><Del>
startinsert
endfunction
" cleans up on leaving insert mode
function! VertEnd()
iunmap <BS>
augroup Vert
autocmd!
augroup END
endfunction
" command to start writing vertically
command! Vert call VertStart()
:Vert
세로로 쓰기 시작하려면 명령을 입력하십시오 . 삽입 모드를 나가면이 "모드"가 자동으로 비활성화됩니다. 물론이 명령을 자주 사용해야하는 경우 바로 가기에 매핑 할 수 있습니다.
InsertLeave
이므로 키를 사용하면주의해야합니다).<C-C>
.
InsertLeave
.이 키에 대해 왜 트리거되지 않는지 궁금 합니다.
<C-C>
삽입 모드를 종료하는 좋은 방법으로 거부 추세를 조장한다고 가정 합니다. 당신이 언급 한 방식은 때로는 좋은 방법임을 암시 할 수 있습니다. "주의 사항 : 컴퓨터의 플러그를 뽑아서 Microsoft Word를 닫으면 문서가 저장되지 않습니다."라고 말하는 것과 같습니다.
<C-C>
문제의 원인에 대한 메모를 추가했습니다 . 약어 확장을 억제하는 삽입 모드를 유지하는 다른 방법을 알지 못합니다.없는 <C-C>
경우 적어도 같은 매핑의 일부로 유용합니다 inoremap <silent> <c-c> <c-c>:doautocmd InsertLeave<cr>
.
<C-C>
약어를 확장하지 않고 삽입 모드를 종료 하는 것으로 설명하는 곳을 찾았으며 InsertLeave
이벤트를 트리거하지 않는 방법에 대한 언급이 없습니다 . 내장 된 방법이 있는지 궁금합니다.하지만 지금은 매핑이 좋습니다.
평소와 같이 입력 한 후 Vim에서 다음과 같이 대체를 사용하여 현재 가로 텍스트를 세로로 변환 할 수 있습니다 (현재 행에 적용됨).
:s/\(.\)/\1\r/g
또는 기억하기 쉬운 방법은 모든 명령에 대해 다음 명령 중 하나를 실행하는 것입니다.
:%!fold -w1
:%!grep -o .
현재 줄 이상을 적용하려면을 앞에두고 V필요한 경우 더 많은 줄의 영역을 확장 한 다음 위를 실행하십시오 (하지만 제외 %
).
Windows의 PowerShell의 경우 fold 대체를 확인 하십시오 .
간단한 키 매핑을 정의하려면 (예 :) F2다음을 시도하십시오.
:nnoremap <F2> V:!fold -w1<CR>
그런 다음 무언가를 입력하고를 눌러 F2텍스트를 세로로 만듭니다.
다른 대안은 자동 단어 줄 바꿈을 설정하는 것입니다.
:set tw=1 " textwidth
:set formatoptions+=t
공백이 허용하는 한 자동으로 텍스트를 1 자에 가깝게 줄 바꿈합니다. 단점은 각 문자 뒤에 공백이 있어야한다는 것입니다. 따라서 누르는 것과 거의 동일합니다.Enter
:s/\(.\)/\1\r/g
사용할 수 있습니다 :s/./\0\r/g
.
나는 당신이 푸른 달에서 한 번 이상 그 일에 관심이 있다면 매크로가 특이한 일을하는 멋진 방법이라는 것을 알았습니다. 다음 테이블이 있다고 가정 해 봅시다.
%
% Not Important
% O ------------------------->
% | Stuff in side the table
% S |
% o | So you can't just write your
% m |
% e | text and transform it into
% |
% M | the shape that you want
% s |
% g | Macros help here
% |
% V
그리고 이제 교체 할 가정 해 봅시다 Some Msg
으로 Other Message
. 먼저 추가 문자 (마지막 줄 앞에 :)에 대한 테이블을 확장합시다 yy5p
.
%
% Not Important
% O ------------------------->
% | Stuff in side the table
% S |
% o | So you can't just write your
% m |
% e | text and transform it into
% |
% M | the shape that you want
% s |
% g | Macros help here
% |
% |
% |
% |
% |
% |
% V
내가 올 매크로는 이전 텍스트를 바꾸면서 텍스트를 가로에서 세로로 변환하는 것을 처리합니다. 첫 번째 위치에 텍스트를 입력하여 시작하십시오 (커서가 끝에 있음 Other Message
).
%
% Not Important
% O ------------------------->
% | Stuff in side the table
% SOther Message |
% o | So you can't just write your
% m |
% e | text and transform it into
% |
% M | the shape that you want
% s |
% g | Macros help here
% |
% |
% |
% |
% |
% |
% V
다음 매크로를 기록하십시오.
qq
: 매크로 기록 시작 q
^
: 줄의 시작으로 이동3l
: 텍스트를 놓을 열로 이동x
: 오래된 캐릭터를 삭제l
: 이전 문자 대신 메시지에서 한 문자 만 남기고 오른쪽으로 이동합니다.v
: 시각 모드로 이동f|
:로 이동 |
2h
: 두 글자 뒤로 이동d
: 컷 선택j
: 아래로 이동P
: 커서 앞에 붙여 넣기q
: 매크로 기록 종료이 시점에서 당신은 :
%
% Not Important
% O ------------------------->
% | Stuff in side the table
% O |
% other Message | So you can't just write your
% m |
% e | text and transform it into
% |
% M | the shape that you want
% s |
% g | Macros help here
% |
% |
% |
% |
% |
% |
% V
매크로를 여러 번 반복하십시오 (예 : 문자 수이지만 미리 알 필요는 없습니다. 과소 평가 한 다음 견적이 얼마나 가까운 지 확인한 후에 계속하십시오). 그럼 함께 가자 10@q
. 당신은 얻는다 :
%
% Not Important
% O ------------------------->
% | Stuff in side the table
% O |
% t | So you can't just write your
% h |
% e | text and transform it into
% r |
% | the shape that you want
% M |
% e | Macros help here
% s |
% s |
% a |
% ge |
% |
% |
% V
좋아, 하나 더 ( @q
) :
%
% Not Important
% O ------------------------->
% | Stuff in side the table
% O |
% t | So you can't just write your
% h |
% e | text and transform it into
% r |
% | the shape that you want
% M |
% e | Macros help here
% s |
% s |
% a |
% g |
% e |
% |
% V
커서가 이제 마지막에 e
있습니다. 매크로는 마지막 글자와 잘 작동하지 않습니다 (만족스러운 결과를 위해 시도한 @q
다음 u
취소 할 수 있음). X
백 스페이스의 경우 직접 조정하면 됩니다.
qq03lxldt|i ^[jPxq@q
:s/./% \0\r/
을 추가 할 수 있습니다%
... 그러나 훌륭한 해결책은 아니지만 ...