vi(m)의 일부 동작을 살펴보겠습니다. 샘플라인을 이용했어요
AA BBB
이러한 조사의 주제로서 각 실험에 대해 줄 시작 부분에 커서를 두고 일반 모드에서 시작했습니다. 실험은 일반 모드에서도 종료되며 rX
최종 커서 위치를 나타내는 닫기 작업을 추가했습니다 .
tB
, fB
, w
, 4가지 액션을 살펴보세요 3l
. 첫 번째는 커서를 이전 공간으로 이동 BBB
하고 다른 것들은 첫 번째 공간으로 이동합니다 B
. 그건,
tBrX # AAXBBB
fBrX # AA XBB
wrX # AA XBB
3lrX # AA XBB
이제 문서가 삭제 컨텍스트에서 이러한 이동을 수행하는 방법을 살펴보겠습니다.
윔:
d{motion} Delete text that {motion} moves over
FreeBSD vi(1) 매뉴얼 페이지:
d motion Delete the region of text described by ... motion
그래서 이는 삭제와 움직임의 구성에 대한 단순하고 명확한 개념을 표현합니다. 이 시점에서는 삭제 범위가 포함인지 배타인지를 제외한 거의 모든 것이 명확해 보입니다. 이동 후 위치를 삭제할지, 유지할지 여부입니다.
그렇다면독점적인, 위 작업의 접두사를 사용하면 d
다음을 모두 제거해야 합니다 X
.
dtBrX # XBBB
dfBrX # XBB
dwrX # XBB
d3lrX # XBB
그렇다면포함됨, 위에 표시된 위치 X
도 삭제되므로 최종 위치는 후속 위치입니다. 즉, 또 다른 문자가 삼켜지므로 다음과 같은 결과를 얻습니다.
dtBrX # XBB
dfBrX # XB
dwrX # XB
d3lrX # XB
이제 어떻게 생겼는지 봅시다실생활:
dtBrX # XBB
dfBrX # XB
dwrX # XBB
d3lrX # XBB
즉, 구성은 다음과 같습니다.포함됨그러나 처음 두 작업의 경우독점적인후자의 경우! 이것을 설명할 수 있는 원리가 있나요?
또한 c
Vim 문서에는 로 설명되어 있습니다 Delete {motion} text and start insert
. 사양에 따르면 다음 이후에 일반 모드로 돌아가면 다음 c
과 c{motion}<ESC>l
같은 효과가 있을 것으로 예상됩니다.d{motion}
vim의 `ESC`가 커서를 원래 위치로 다시 이동시키는 이유는 무엇입니까?, <ESC>
커서를 왼쪽으로 이동시키는 효과가 있으므로 l
일반/삽입 모드를 앞뒤로 통해 위치를 유지하려면 보상이 필요합니다). 거의 다 끝났습니다.
ctB<ESC>lrX # XBB
cfB<ESC>lrX # XB
cw<ESC>lrX # XBBB
c3l<ESC>lrX # XBB
... c
다음과 결합하면 다른 효과만 나타납니다 w
. 이 작업은 이전 공백 BBB
, 즉 이동된 대상 앞의 문자도 보존합니다! 이 행동의 논리는 무엇입니까?
답변1
d
그 자체로는 포괄적이지도 배타적이지도 않습니다. 이것운동예. 각 모션에 대한 도움말은 포괄적인지 배타적인지를 나타냅니다.
f
f{char} To [count]'th occurrence of {char} to the right. The
cursor is placed on {char} |inclusive|.
t
t{char} Till before [count]'th occurrence of {char} to the
right. The cursor is placed on the character left of
{char} |inclusive|.
<S-Right> or <S-Right> w
w [count] words forward. |exclusive| motion.
l or l
<Right> or <Right> <Space>
<Space> [count] characters to the right. |exclusive| motion.
자세한 내용은 다음을 참조하세요.:h inclusive
.
즉, 구성에는 처음 두 악장은 포함되지만 마지막 두 악장은 제외됩니다! 이것을 설명할 수 있는 원리가 있나요?
f
와 는 t
포괄적 w
이고 배타적 이라고 볼 수 있습니다 l
.
w 와 함께 사용하면
c
다른 효과가 있습니다. 이 작업은 이전 공백도 보존합니다BBB
.
이는 문서에도 언급된 특별한 경우입니다. 조금 더 아래를 보세요:h word
:
Special case: "cw" and "cW" are treated like "ce" and "cE" if the cursor is
on a non-blank. This is because "cw" is interpreted as change-word, and a
word does not include the following white space.