.
마지막 편집 명령을 반복하는 데 사용할 수 있다는 것을 알고 있습니다 .
마지막 UI 조작 명령을 반복하는 방법이 있습니까? 예를 들어, 10<C-W>-
10 줄씩 창을 축소하도록 쓸 수 있습니다 . 이 명령을 더 축소하려면 ⟨ 일부 키 ⟩를 눌러이 명령을 쉽게 반복 할 수 있다는 것이 좋습니다.
fz
다음과 10;
? 무엇에 대해 :tabm +1
? 이것들은 모두 특별한 경우 여야합니까?
.
마지막 편집 명령을 반복하는 데 사용할 수 있다는 것을 알고 있습니다 .
마지막 UI 조작 명령을 반복하는 방법이 있습니까? 예를 들어, 10<C-W>-
10 줄씩 창을 축소하도록 쓸 수 있습니다 . 이 명령을 더 축소하려면 ⟨ 일부 키 ⟩를 눌러이 명령을 쉽게 반복 할 수 있다는 것이 좋습니다.
fz
다음과 10;
? 무엇에 대해 :tabm +1
? 이것들은 모두 특별한 경우 여야합니까?
답변:
vim은 이전에 실행 된 wincmd를 추적하지 않기 때문에 vim에서는 기본적으로이 작업을 수행 할 수있는 방법이 없습니다. 그러나 몇 가지 영리한 매핑을 통해이 작업을 수행 할 수 있습니다.
function! s:Wincmd(count, key)
" If count is not zero, use the original count. If otherwise, don't
" include a count.
let if_count = a:count ? a:count : ""
" This builds a wincmd from the given key, and saves it so
" it can be repeated.
let g:last_wincmd = "wincmd " . nr2char(a:key)
" Execute the built wincmd
execute if_count . g:last_wincmd
endfunction
function! s:WincmdRepeat(count)
" If no wincmd has been executed yet, don't do anything
if !exists('g:last_wincmd') | return | endif
" If a count is given, repeat the last wincmd that amount of times.
" If otherwise, just repeat once.
let if_count = a:count ? a:count : ""
execute if_count . g:last_wincmd
endfunction
" Overwrite the default <C-w> mapping so that the last wincmd can be kept
" track of. The getchar function is what captures the key pressed
" directly afterwards. The <C-u> is to remove any cmdline range that vim
" automatically inserted.
nnoremap <silent> <C-w> :<C-u>call <SID>Wincmd(v:count, getchar())<CR>
" This just calls the function which repeats the previous wincmd. It
" does accept a count, which is the number of times it should repeat the
" previous wincmd. You can also replace Q with whatever key you want.
nnoremap <silent> Q :<C-u> call <SID>WincmdRepeat(v:count)<CR>
사용하는 매핑이있는 경우 매핑이 다양 <C-w>
하지 않은 경우에만 반복 할 수 있습니다 nore
. 를 사용하여 발행 된 wincmd는 :wincmd
반복되지 않습니다. 또한, 하나 개 이상의 문자를 포함하는 모든 wincmds는 수행 될 수 없다 (예로서 <C-w>gf
) .
:help v:count
:help getchar()
:help nr2char()
:help expr1
:help :wincmd
:help :execute
:help :for
:help :map-<silent>
:help c_CTRL-U
:help <SID>
.
동작이 카운트와 다르게 동작합니다 . 에 개수가 제공 .
되면 이전 개수는 무시됩니다. 그래서 2dd
다음 3.
2 선 다음 3 개 행을 삭제 것입니다; 대조적으로, 사용자의 매핑과, 2<C-w>-
이어서 3Q
도 6 (= 2 × 3)에 의해 다음 2 명 행 선으로 윈도우를 축소하고있다. 이 동작은 문제가 없지만 사용자 지정 명령의 동작 방식을 선택할 때 유사한 내장 Vim 명령을 사용하는 것이 좋습니다.
원하는 것을 수행 할 수있는 repmo.vim ( "반복 모션") 이라는 또 다른 플러그인 이 있습니다.
그러나 반복하려는 동작 (또는 일반적인 동작)을 지정해야합니다 . 광산은 현재 다음과 같이 구성되어 있습니다 :
let g:repmo_mapmotions = "j|k h|l zh|zl g;|g, <C-w>w|<C-w>W"
let g:repmo_mapmotions .= " <C-w>+|<C-w>- <C-w>>|<C-w><"
let g:repmo_key = ";"
let g:repmo_revkey = ","
그렇게 한 후에 5 CTRL-W +나는 ;그것을 여러 번 반복하도록 칠 수 있습니다 .
플러그인은 지정된 각 키에 대한 맵핑을 작성하여 작동합니다.
때 f
또는 t
사용의 ;
및 ,
매핑은 기본 동작으로 다시 삭제됩니다.
g;
이전 편집 지점으로 돌아가는 데 특히 유용한 매핑을 찾습니다 . g; ; ; ;
,
즉시 행동을 누르면 5,
예상대로 작동합니다. 당신은 당신의 설정이 가능인가 mapleader
에를 ,
?