나는 Vim에서 항상 새로운 명령을 배우고 있지만, 모든 사람들이 가끔 새로운 것을 배우게 될 것입니다. 나는 최근에 이것에 대해 배웠다.
zz, zt, zb- 화면의 중간, 상단 또는 하단에 위치 커서
오래 전에 배우고 싶었던 다른 유용하거나 우아한 명령은 무엇입니까?
나는 Vim에서 항상 새로운 명령을 배우고 있지만, 모든 사람들이 가끔 새로운 것을 배우게 될 것입니다. 나는 최근에 이것에 대해 배웠다.
zz, zt, zb- 화면의 중간, 상단 또는 하단에 위치 커서
오래 전에 배우고 싶었던 다른 유용하거나 우아한 명령은 무엇입니까?
답변:
삽입 모드를 전환 하는 CtrlC대신 사용할 수 있다는 것을 알고 싶습니다 Esc. 그것은 저에게있어 실질적인 생산성 향상이었습니다.
내가 배운 가장 최근의 "와우"트릭은 복잡한 검색 및 교체 방법입니다. 과거에는 종종 대체 작업을 수행하는 정규 표현식이 복잡하여 작동하지 않았습니다. 더 좋은 방법이 있습니다.
:set incsearch " I have this in .vimrc
/my complicated regexp " Highlighted as you enter characters
:%s//replace with this/ " You don't have to type it again
여기서 "트릭"(더 나은 단어를 원함)은 검색을 사용하여 정규 표현식을 작성하고 문자를 입력 할 때 'incsearch'가 강조 표시 한 다음 대체에 빈 패턴을 사용할 수있는 방법입니다. 패턴의 기본값은 마지막 검색 패턴입니다.
예:
/blue\(\d\+\)
:%s//red\1/
다음과 같습니다.
:%s/blue\(\d\+\)/red\1/
보다:
:help 'incsearch'
:help :substitute
<Ctrl-R>/
은 마지막 검색 쿼리를 삽입하십시오. (참조 :help i_CTRL-R
) 위와 유사하지만 실제로는 검색 결과의 일부를 캡처하려고합니다. (이 같은 %s:/\\([fF]rank\\) and mary/marie and \1/g
)
:%s//...
*
(커서 아래의 검색 단어) 와도 작동합니다 . visual-star-search라는 플러그인 *
은 시각적 선택의 전체 텍스트와 일치 하도록 기능을 확장하여 선택한 텍스트 (예 : v3e
3 개의 시각적 단어 선택) *
(검색) 및 :%s//replacement/g
(모든 발생을 " 바꿔 놓음"). 나는 이것을 너무 자주 사용하여 전역 대체 명령에 대한 매핑을 갖습니다 :nmap <Leader>s :%s///g<left><left>
.
%s:
해야 :%s
하고, 내 시스템에, 내가 필요로 \(\)
대신\\(\\)
내 친구에게 가장 많이 사용되는 명령에 대한이 참조를 만들었습니다.
select v
select row(s) SHIFT + v
select blocks (columns) CTRL + v
indent selected text >
unindent selected text <
list buffers :ls
open buffer :bN (N = buffer number)
print :hardcopy
open a file :e /path/to/file.txt
:e C:\Path\To\File.txt
sort selected rows :sort
search for word under cursor *
open file under cursor gf
(absolute path or relative)
format selected code =
select contents of entire file ggVG
convert selected text to uppercase U
convert selected text to lowercase u
invert case of selected text ~
convert tabs to spaces :retab
start recording a macro qX (X = key to assign macro to)
stop recording a macro q
playback macro @X (X = key macro was assigned to)
replay previously played macro * @@
auto-complete a word you are typing ** CTRL + n
bookmark current place in file mX (X = key to assign bookmark to)
jump to bookmark `X (X = key bookmark was assigned to
` = back tick/tilde key)
show all bookmarks :marks
delete a bookmark :delm X (X = key bookmark to delete)
delete all bookmarks :delm!
split screen horizontally :split
split screen vertically :vsplit
navigating split screens CTRL + w + j = move down a screen
CTRL + w + k = move up a screen
CTRL + w + h = move left a screen
CTRL + w + l = move right a screen
close all other split screens :only
* - As with other commands in vi, you can playback a macro any number of times.
The following command would playback the macro assigned to the key `w' 100
times: 100@w
** - Vim uses words that exist in your current buffer and any other buffer you may have open for auto-complete suggestions.
gi 는 삽입 모드로 전환하여 이전과 같은 위치에 커서를 놓습니다.
g;
지금 에 대해 알게되었을 때 나는 너무나 기뻤다 :-)
g;
그것의 "반대"가 있고 보라면 시도해 보았습니다 g,
. 앞으로 갈 수 있습니다!
a
더 짧습니다. :) 그러나 일반적으로 반대 작업 gi
인 매우 직관적 g
입니다.
:큐!
vi를 처음 시작하기 전에 알고 있었으면 좋겠습니다.
:q!
버퍼를 저장하지 않고 종료하려고하면 사용하도록 지시합니다 .
^ XF 는 현재 디렉토리의 파일 이름 사용을 완료합니다. 더 이상 터미널에서 복사 / 붙여 넣기 또는 고통스러운 이중 점검이 필요하지 않습니다.
^ XP 는 현재 파일에서 단어 사용을 완료합니다
: set scrollbind 는 한 버퍼가 다른 버퍼와 나란히 스크롤하도록합니다. 예를 들어 창을 두 개의 수직 창으로 분할하십시오. 각각 하나의 파일을로드하십시오 (아마도 동일한 파일의 다른 버전). 수행 :set scrollbind
각. 이제 하나를 스크롤하면 두 창이 함께 스크롤됩니다. 파일 비교에 이상적입니다.
:set noscb
끄고 켜는 데 사용 :set scb
합니다 (아님 :scrollbind
). :h scrollbind
:diffsplit file2
vim을 실행 하거나 시작하여 파일을 비교할 수도 있습니다 vim -d file1 file2
. Vim은 자동으로 두 파일을 스크롤 바인드합니다.
전체 명령 세트를 사용하여 대괄호 / 괄호 / 따옴표 / 태그 안의 텍스트를 변경할 수 있습니다. 그룹의 시작과 끝을 찾지 않아도되는 것이 좋습니다. 시험ci(, ci{, ci<, ci", ci', ct
변경하려는 객체의 종류에 따라 . 그리고ca(, ca{, ...
변형은 대괄호 / 따옴표도 삭제합니다.
기억하기 쉬움 : 괄호 안의 내용 변경 / 괄호 안의 내용 변경
c
. d
삭제 (예 : di (또는 da (), y
k 크, v
선택 등 )를 사용 하여이 작업을 수행 할 수 있습니다 .
:help
. 어디서나 찾을 수 없습니다. > _ <
:help motion.txt
! 감사!
cit
하는 경우 현재 태그의 내용을 변경하는 데 사용할 수 있습니다 . 예를 들어에서 <span>Some text</span>
커서가 "m"위에 있으면 dit
얻을 수 <span></span>
있습니다.
절대로 누르지 마십시오 Esc. 이유를 알아 보려면이 답변을 참조하십시오 . 위에서 언급했듯이 Ctrl+ C가 더 나은 대안입니다. Caps Lock탈출을 위해 키를 매핑하는 것이 좋습니다 .
Ctags 호환 언어를 편집하는 경우 태그 파일 및 :ta
, Ctrl+ ]등을 사용하면 여러 파일에서 코드를 탐색 할 수 있습니다. 또한 tags 파일을 사용한 Ctrl+ N및 Ctrl+ P완성은 키 입력을 줄이는 좋은 방법입니다.
버퍼보다 넓기 때문에 줄 바꿈 된 줄을 편집하는 경우 gk 및 gj를 사용하여 위 / 아래로 이동할 수 있습니다.
나쁜 습관을 배우기 전에 모션 명령을 효과적으로 사용하는 데 집중하십시오. xa 번을 여러 번 누르는 대신 'dt'또는 'd3w'를 사용하는 것과 같은 것. 기본적으로, 같은 키를 반복해서 누를 때마다 같은 일을 수행하는 것이 더 좋고 빠르며 간결한 방법 일 수 있습니다.
별표 키 ( *)는 커서 아래에서 단어를 검색합니다.
[+ Tab는 커서 아래에있는 C 함수의 정의로 이동합니다. (그러나 항상 작동하는 것은 아닙니다.)
[ + Tab
path
set path+=path/to/files
Vim brainstore에 최근 추가 한 것들 중 일부 :
^wi
: 창을 분할하여 커서 아래의 태그로 이동합니다.cib/ciB
: 현재 괄호 () 또는 중괄호 {} 안의 텍스트를 각각 변경하십시오.:set listchars=tab:>-,trail:_ list
: 다른 공간과 시각적으로 다른 탭 / 트레일 공간을 표시합니다. 파이썬 코딩에 많은 도움이됩니다.cib
중대하다.
ci}
및 cit
와우,이 될 것입니다 - 매우 유용합니다. vi[m]
매우 흥미로운 프로그램을 증명하고 있습니다!
: shell Vim에서 쉘 콘솔을 시작합니다. 예를 들어 Vim을 종료하지 않고 스크립트를 테스트하려는 경우에 유용합니다. 쉘 콘솔로 작업을 마치면 ^ d 를 누르면 Vim과 편집 된 파일로 돌아옵니다.
:!sh
너무 힘들 것 같아요 . 현재 버퍼에서 레지스터 / 완료를 사용하여 명령 줄을 작성하는 것이 더 쉽거나 현재 파일 이름 / 디렉토리 등을 위해 %
/ %:h
를 사용 하는 것이 더
map <Esc>! :shell<CR>
당신의 .vimrc
, 당신은 단지 Alt +!, 또는 Alt + 시프트 + 1 쉘을 시작할 수 있습니다. (니모닉 : 쉘로 :!{cmd}
실행 {cmd}
)
:shell
그래도 새로운 중첩 쉘 레벨을 시작합니다. 반면에 ctrl-z
그렇지 않습니다.
암호 해독
vim -x filename.txt
암호, 편집 및 저장을 요청합니다. 이제 vi에서 파일을 다시 열 때마다 암호를 입력하여 볼 수 있습니다.
set cryptmethod=blowfish
(7.3 이상에서만 사용 가능 하지 않으면 ) 웃음 강도가있는 알고리즘을 사용합니다. 자세한 내용 help encryption
은 참조하십시오 .
:set cm=blowfish2
"
별로. Makefile
현재 디렉토리에 필요합니다 .
Vim에있는 동안 :make
쉘을 호출하고 프로그램을 빌드하려면 입력하십시오. 출력이 스크롤 될 때 걱정하지 마십시오. 그냥 누르면EnterVim으로 돌아갈 때 십시오.
Vim으로 돌아가서 다음 명령을 사용할 수 있습니다.
:cl
오류, 경고 및 기타 메시지를 나열합니다.:cc
화면 하단에 현재 오류 / 경고 메시지를 표시하고 코드에서 문제를 일으키는 행 으로 이동합니다.:cc n
받는 사람 점프 n
번째 메시지.:cn
다음 메시지로 넘어갑니다.:cp
이전 메시지로 이동합니다.더있다; 관심이 있다면 :help :cc
Vim에서 입력하십시오 .
이전 (^ P) 또는 다음 (^ N) 텍스트를 완성하십시오.
이전 (^ O- "O"이전 위치) 또는 다음 (^ O- "I"바로 "O"근처)으로 이동하십시오.
검색, 파일 편집 등을 수행 할 때 이러한 "점프"를 앞뒤로 탐색 할 수 있습니다.
ma를 누릅니다 (m- 마크,-마크 이름). 나중에 위치로 돌아가려면 `a를 입력 하십시오 .
:help jump-motions
누구나 더 많은 정보를 원할 경우 답변에 등을 포함시킬 가치가 있습니다 .
%
커서가 따옴표, 괄호, 괄호 또는 중괄호에있을 때 누르면 일치하는 항목을 찾습니다.
[문자] ( t
) 까지 . 범위를 허용하는 모든 명령에 유용합니다. 나의 마음에 드는 것입니다 ct;
또는 ct)
후행 세미콜론 / 닫는 괄호로 모든 것을 삭제 한 후 삽입 모드에서 당신을 배치합니다.
또한, G
과 gg
(각각 하단과 상단으로 이동) 유용합니다.
f
그 대신에 그 캐릭터를 통해t
[행동] 할 것이다 . 예를 들어, 함수 인수의 시작 부분에 커서를두면 (물론 적절한 언어로) 삭제됩니다. df,
^r^w
명령 모드에서 커서 아래에 단어를 붙여 넣습니다.
grep 또는 replace 명령을 사용할 때 정말 유용합니다.
줄 번호를 입력하고 gg
그 줄로 이동합니다.
<number>go
받는 간다 <number>
파일에 번째 문자.
기본 비주얼 블록 모드에 대해 알고 있었으면 좋겠습니다. Vim을 다른 용도로 사용하지 않더라도 일부 블록 작업을 위해 Vim에서 파일을 여는 것이 시간을 절약 할 수 있습니다. 나는 이런 종류의 일을 수동으로하는 데 많은 시간을 낭비했다고 확신합니다.
예를 들어 기호 상수 이름의 목록을 일관되게 리팩토링 할 때 특히 유용한 것으로 나타났습니다.
비주얼 블록 모드로 들어가기 ( Ctrl+ Q대신 Windows의 경우 Ctrl+ V)
커서를 움직여 원하는 블록을 강조 표시하십시오.
그런 다음를 I whatever text
눌러 Esc모든 줄의 텍스트를 블록 앞에 삽입하십시오.
모든 줄에서 블록 뒤에 텍스트를 삽입 하려면 A
대신 사용하십시오 I
.
또한 시각적 선택의 경우를 토글하면 ~
시간을 크게 절약 할 수 있습니다.
d
물론 열을 삭제 하는 것도 물론입니다.
q <letter>-매크로를 기록합니다.
과
@ <같은 글자>-재생합니다.
Vim에서 가장 유용한 명령은 컴퓨터가 많은 작업을 수행하도록 할 수 있으며 프로그램이나 아무것도 작성할 필요가 없기 때문입니다.
q
단순화 문제,하지만 당신은 그것을 사용할 필요가 없습니다 : 단지라는 이름의 버퍼 명령 버퍼에 저장 "
- 예를 들어, 사용 버퍼 a
- "ad$
...
q
는 매크로를 기록합니다. 매크로는 텍스트뿐만 아니라 명령을 포함 할 수 있으므로와 "ad$
는 다릅니다 qa
.
qa
는 그것을 실행하지 않습니다. qa
기록하고 @a
실행합니다. 매크로를 일반 텍스트로 작성하고 a
와 같은 레지스터에 저장 "ad$
한 다음로 실행할 수 @a
있지만 실제로는 더 많은 작업입니다. 잘라 내기 및 붙여 넣기와 기록 및 실행에는 근본적인 차이가 있습니다.
:tabe filepath
gt and gT or :tabn and :tabp
:mksession session_file_name.vim
vim -S session_file_name.vim
:qa
autocmd
이벤트에서 명령을 실행할 수 있으므로 다음과 같은 파일을 사용하여 파일을 저장할 때 make 명령을 실행할 수 있습니다.
:autocmd BufWritePost *.cpp :make
qx 는 키 입력 기록을 시작합니다. 거의 모든 편집 작업을 수행 할 수 있으며 Vim은이를 기억합니다. 히트 Q 작업을 마친 후 다시 눌러 @x는 키 입력을 재생합니다. 매핑을 작성하기에는 너무 복잡한 반복 편집에 유용합니다. x 이외의 문자를 사용하여 많은 레코딩을 가질 수 있습니다 .
필자가 가장 좋아하는 것 중 하나가 도움말 창을 새 탭에 넣는 것입니다.
:tab help <help_topic>
이것은 새로운 탭에서 도움을 주며, Vim 탭을 좋아하는 누군가에게 이것은 엄청나게 유용합니다.
:b [any portion of a buffer name]
버퍼를 전환합니다. 따라서 "somefile1.txt"와 "someotherfile2.txt"의 두 버퍼가있는 경우 간단히 두 번째 버퍼로 전환 할 수 있습니다 ":b 2.t<enter>"
. 필수는 아니지만 탭 완성도 지원합니다.
탭 완성에 대해 말하면 설정 :set wildmode=full wildmenu
도 매우 유용합니다. 명령 모드에 대한 완전한 탭 완성 기능과 사용시 가능한 모든 일치 항목의 매우 유용한 ncurses 스타일 메뉴를 사용할 수 있습니다.