사용법 - Vim과 함께 가장 생산적인 지름길은 무엇입니까?




나무위키 장점 (25)

내장 파일 탐색기를 사용하십시오! 이 명령어는 :Explore소스 코드를 매우 빠르게 탐색 할 수있게합니다. 내 매핑이 있습니다 .vimrc.

map <silent> <F8>   :Explore<CR>
map <silent> <S-F8> :sp +Explore<CR>

탐색기를 사용하여 파일을 수정할 수도 있습니다. 나는 내가 좋아하는 열쇠 몇 개를 게시 <F1>할 것이고 , 누르면 전체 목록을 줄 것이다.

  • - : 가장 유용 : 상위 디렉토리로 변경 ( cd ..)
  • mf : 파일에 표시
  • D : 아무 것도 표시되지 않으면 표시된 파일이나 커서가있는 파일을 삭제합니다.
  • R : 커서가있는 파일의 이름을 바꿉니다.
  • d : 현재 디렉토리에 새 디렉토리 만들기
  • % : 현재 디렉토리에 새 파일 만들기

저는 Vim 에 대해 찬반 양론 모두에 대해 많이 들었습니다. Vim을 사용하면 다른 편집기보다 (개발자로서) 더 빨리 수행해야합니다. 저는 Vim을 사용하여 기본적인 것들을하고 있으며 Vim을 사용 하면 생산성 이 10 배나 떨어 집니다.

속도에 관해서 이야기 할 때주의해야 할 두 가지 사항 만 있습니다 (충분히 신경 쓰지는 않을지라도) :

  1. 왼손과 오른손을 번갈아 사용하는 것이 키보드를 사용하는 가장 빠른 방법입니다.
  2. 마우스를 만지지 않는 것이 가장 빠른 두 번째 방법입니다. 손을 움직이거나, 마우스를 움켜 잡고, 움직이거나, 키보드로 가져 오는 데 오랜 시간이 걸립니다. (그리고 종종 올바른 장소로 손을 돌려 놓았는지 확인하기 위해 키보드를 봐야합니다.)

왜 내가 Vim과 생산성이 덜 떨어진지 보여주는 두 가지 예가 있습니다.

복사 / 잘라 내기 및 붙여 넣기. 나는 항상 그렇게한다. 현대의 모든 편집자들과 함께 왼손으로 Shift 를 누르고 오른손으로 커서를 움직여 텍스트를 선택하십시오. 그런 다음 Ctrl + C를 복사하면 커서와 Ctrl + V 붙여 넣기가 이동합니다.

Vim을 사용하면 끔찍할 수 있습니다.

  • yy 는 한 줄을 복사합니다 (거의 전체 줄을 원하지 않습니다!).
  • [number xx]yyxx 줄을 버퍼에 복사합니다. 그러나 당신이 원하는 것을 선택했는지 정확히 알 수 없습니다. 나는 종종 [number xx]dd 를 실행 한 다음 실행 취소해야합니다!

다른 예시? 검색 및 바꾸기.

  • PSPad : Ctrl + f를 누른 다음 검색 할 내용을 입력하고 Enter 키를 누릅니다 .
  • Vim : / 에 검색 할 내용을 입력 한 다음 특수 문자 앞에 \ 를 붙이면 Enter 키를 누릅니다 .

그리고 Vim을 가진 모든 것은 이와 같습니다 : 나는 그것을 올바른 방법으로 처리하는 방법을 모른다.

주의 : 이미 Vim cheat sheet 읽었습니다. :)

내 질문은 :

Vim을 사용하여 현대 편집자보다 생산성을 높이는 방법은 무엇입니까?


나는 아무도 t운동을 언급하지 않는 것을 알기 위해 놀랐다 . 필자는 자주 dt,또는 매개 변수 목록과 함께 사용합니다.yt,


세션

에이. 세션 저장

: mks sessionname

비. 세션 저장 강제 실행

: mks! 세션 이름

기음. 세션로드

gvim 또는 vim -S sessionname

더하기 및 빼기

에이. 더하기 및 빼기

CTRL-A; 커서에서 또는 그 후에 숫자 나 알파벳 문자에 [count]를 추가하십시오. {Vi에 없음

CTRL-X 커서 나 그 이후의 숫자 또는 영문자에서 [count]를 뺍니다. {Vi에 없음}

비. 윈도우 키 매핑 해제

창에서 Ctrl-A는 이미 전체 파일 선택을 위해 매핑되어 있으므로 rc 파일에서 매핑을 해제해야합니다. mark mswin.vim CTRL-mapping 부분을 주석으로 달거나 unmap으로 rc 파일을 추가하십시오

기음. 매크로 사용

CTRL-A 명령은 매크로에서 매우 유용합니다. 예 : 번호 매기기 목록을 만들려면 다음 단계를 사용하십시오.

  1. 첫 번째 목록 항목을 만들고 숫자로 시작하는지 확인하십시오.
  2. qa - 버퍼 'a'에 녹음 시작
  3. Y - 항목을 빼냅니다.
  4. p - 첫 번째 항목 아래에 항목의 복사본을 넣습니다.
  5. CTRL-A - 숫자를 증가시킵니다.
  6. q - 녹음 중지
  7. @a - 홱 잡아 당김, 반복 및 반복 횟수 반복

모두 정상 모드에서 :

현재 행의 특정 문자의 다음 인스턴스로 이동하는 f <char>; 반복합니다.

현재 행의 특정 문자의 이전 인스턴스로 이동하는 F <char> . 반복합니다.

지능적으로 사용하면 위의 두 가지가 당신을 살인자로 만들 수 있습니다.

* 다음 인스턴스를 검색 할 단어.

이전 인스턴스를 검색 할 단어를 # 표시 합니다.


지난 주 직장에서이 프로젝트는 다른 프로젝트에서 많은 Python 코드를 상속 받았다. 불행하게도이 코드는 기존 아키텍처에 적합하지 않았습니다. 모든 것이 글로벌 변수 및 함수로 완료되었으므로 멀티 스레드 환경에서는 작동하지 않습니다.

우리는 객체 지향형으로 재 작성해야했던 ~ 80 개의 파일을 가지고있었습니다. 모든 함수가 클래스로 옮겨졌고, 매개 변수가 변경되었으며, import statements가 추가되었습니다. 각 파일에 대해 수행해야하는 약 20 가지 유형의 수정 목록이있었습니다. 나는 한 사람이 손으로 그것을하는 것이 하루 2-4 번을 할 수 있다고 추정 할 것이다.

그래서 나는 첫 번째 작업을 손으로 수행 한 다음 변경을 자동화하기 위해 vim 스크립트를 작성했습니다. 그것의 대부분은 vim 명령 목록이었습니다.

" delete an un-needed function "
g/someFunction(/ d

" add wibble parameter to function foo "
%s/foo(/foo( wibble,/

" convert all function calls bar(thing) into method calls thing.bar() "
g/bar(/ normal nmaf(ldi(`aPa.

마지막 하나는 약간의 설명이 필요합니다.

g/bar(/  executes the following command on every line that contains "bar("
normal   execute the following text as if it was typed in in normal mode
n        goes to the next match of "bar(" (since the :g command leaves the cursor position at the start of the line)
ma       saves the cursor position in mark a
f(       moves forward to the next opening bracket
l        moves right one character, so the cursor is now inside the brackets
di(      delete all the text inside the brackets
`a       go back to the position saved as mark a (i.e. the first character of "bar")
P        paste the deleted text before the current cursor position
a.       go into insert mode and add a "." 

모든 import 문을 생성하는 것과 같은 좀 더 복잡한 변환을 위해 나는 파이썬을 vim 스크립트에 임베드했다.

몇 시간 동안 작업을 한 후 나는 전환의 95 % 이상을 수행 할 스크립트를 가지고있었습니다. 난 그냥 vim에서 파일을 열고 실행 :source fixit.vim하고 파일이 눈 깜짝 할 사이에 변형됩니다.

우리는 여전히 자동화 할 가치가없는 나머지 5 %를 변경하고 결과를 테스트하는 작업을하고 있습니다. 그러나이 스크립트를 작성하는 데 하루를 소비함으로써 우리는 몇 주 동안의 작업을 저장했다고 평가합니다.

물론 Python이나 Ruby 같은 스크립팅 언어로 이것을 자동화하는 것이 가능할 수도 있지만, 작성하는 데 시간이 오래 걸리고 유연성이 떨어집니다. 정규 표현식만으로는 처리 할 수 ​​없으므로 마지막 예제는 어려울 것입니다 중첩 된 대괄호 (예 : 변환 bar(foo(xxx))대상) foo(xxx).bar(). Vim은 작업에 완벽했습니다.


여러 개의 버퍼, 특히 두 파일을 비교할 때 파일 사이를 빠르게 점프 :bp하고 :bn( Shift+ p또는 Shift+로 올바르게 매핑 n)

vimdiff 모드 (2 개의 수직 버퍼로 분할 해, 차이를 나타내는 컬러로)

영역 복사 Ctrl+v

마지막으로 식별자의 탭 완성 ( "mosh_tab_or_complete"검색). 그것은 삶의 변화 요인입니다.


미군 병사

마지막으로 수정 한 위치로 이동 (일부 검색을 수행 한 후 다시 돌아가 편집을 원할 경우 매우 유용합니다)

^ P와 ^ N

이전 (^ P) 또는 다음 (^ N) 텍스트를 완료하십시오.

^ O 및 ^ I

이전 ( ^O- "O"오래된 위치) 또는 다음 ( ^I- "I"바로 근처 ) 위치로 이동하십시오 "O". 검색을 수행하거나 파일을 편집 할 때 이러한 "점프"를 앞뒤로 탐색 할 수 있습니다.


자동 들여 쓰기 :

gg(문서 시작으로 이동)
=(들여 쓰기 시간!)
shift-g(문서 끝으로 이동)

파일에 'filetype plugin indent on'이 필요 .vimrc하며 'shiftwidth'및 'expandtab'설정이 적절할 것입니다.


비주얼 모드

다른 몇몇 사람들이 말했듯이, 비주얼 모드는 복사 / 잘라 내기 및 붙여 넣기 문제에 대한 해답입니다. Vim은 'v', 'V'및 Cv를 제공합니다. vim에서 소문자 'v'는 기본적으로 메모장의 shift 키와 같습니다. 좋은 점은 당신이 그것을 지킬 필요가 없다는 것입니다. 모든 이동 기술을 사용하여 선택 항목의 시작 (또는 끝) 지점으로 효율적으로 탐색 할 수 있습니다. 그런 다음 'v'를 누르고 효율적인 이동 기술을 사용하여 선택의 다른 끝으로 이동하십시오. 그런 다음 'd'또는 'y'를 사용하면 해당 선택을 잘라내거나 복사 할 수 있습니다.

vim의 시각적 모드가 Jim Dennis의 vi에서 잘라내 기 / 복사 / 붙여 넣기에 대한 설명보다 나은 점은 정확한 위치를 얻을 필요가 없다는 것입니다. 때로는 빠른 움직임을 사용하여 이동하려는 곳의 일반적인 주변으로 이동 한 다음 이동하려는 위치로 정확하게 이동하는보다 복잡한 단일 이동 명령을 생각하는 것보다 다른 이동으로 더 세밀하게 조정하는 것이 더 효율적일 수 있습니다.

이런 식으로 비주얼 모드를 광범위하게 사용하는 것은 항상 새로운 버팀대가되어 더 효율적으로 작업을 수행 할 수있는 새로운 vi (m) 명령을 배울 수 없다는 단점이 있습니다. 그러나 vi (m)의 새로운 측면을 배우는 것에 대해 매우 능동적 인 사람이라면 이것은 아마도 여러분에게 많은 영향을 미치지 않을 것입니다.

나는 또한 시각적 인 선과 시각적 블록 모드가 매우 강력한이 같은 주제, 특히 시각적 블록 모드를 제공한다는 점을 다시 강조 할 것입니다.

키보드의 효율적인 사용에 대하여

나는 또한 번갈아 사용하는 것이 키보드를 사용하는 가장 빠른 방법이라는 주장에 동의하지 않습니다. 그것에는 진리의 요소가 있습니다. 매우 일반적으로 말하면, 동일한 것을 반복해서 사용하는 것은 느립니다. 이 원칙의 가장 중요한 예는 동일한 손가락으로 입력 된 연속 키 입력이 매우 느립니다. 당신의 주장은 아마도이 패턴에서 s / fing / hand / transformation을 사용하는 자연스러운 경향 때문일 것입니다. 어느 정도는 정확하지만 효율 스펙트럼의 극단적 인 끝 부분에서는 정확하지 않습니다.

피아니스트에게 물어보십시오. 손을 교대로 반복하거나 한 손의 연속 손가락을 순서대로 사용하는 것이 더 빠르지 않은지 물어보십시오. 가장 빠른 방법은 4 개의 키 스트로크를 입력 할 때 손을 대치하는 것이 아니라 동일한 손의 손가락 4 개를 오름차순 또는 내림차순으로 입력하는 것입니다 (이를 "실행"이라고 함). 이 가능성을 고려한 후에는이를 분명히해야합니다.

더 어려운 문제는 이것을 최적화하는 것입니다. 키보드에서 절대 거리를 최적화하는 것이 매우 쉽습니다. Vim은 그렇게합니다. "run"레벨에서 최적화하는 것이 훨씬 더 어렵지만, vi (m)와 함께 모달 편집을 사용하면 넌 - 모달 접근 (aac, emacs)보다 더 나은 기회를 얻을 수 있습니다.

이맥스에서

이맥스의 열렬한 지지자들이 마지막 괄호 안에 달린 논평 때문에 내 게시물 전체를 완전히 무시하지 않도록 나는 이맥스와 vim 종교 간의 차이점의 근원을 설명해야한다고 생각한다. 나는 편집자 전쟁에서 한 번도 말한 적이 없으며 아마 다시는하지 않을 것이지만, 다른 사람들이 이런 식으로 차이점을 설명하는 것을 들어 본 적이 없으므로 여기에 설명되어 있습니다. 그 차이점은 다음과 같습니다.

Vim은 원시 텍스트 편집 효율성을 제공합니다. Emacs는 편집기를 사용자 정의하고 프로그래밍 할 수있는 독보적 인 기능을 제공합니다.

맹목적인 vim 열렬한 사람들은 vim에 스크립팅 언어가 있다고 주장 할 것입니다. 그러나 편집기를 제공하도록 설계된 애매한 언어입니다. 이맥스는 Lisp을 가지고있다! 충분했다. 만약 당신이 그 마지막 두 문장의 중요성을 이해하지 못하거나 그 감사를 발전시키기 위해 함수형 프로그래밍과 Lisp에 대해 충분히 배우고 싶다면 vim을 사용해야합니다.

이맥스 열렬은 이맥스가 바이퍼 모드를 가지고 있다고 주장 할 것이고, 그래서 그것은 vim의 수퍼 세트입니다. 하지만 독사 모드는 표준이 아닙니다. 제 이해는 바이퍼 모드가 대다수의 이맥스 사용자들에 의해 사용되지 않는다는 것입니다. 기본값이 아니기 때문에, 대부분의 emacs 사용자는 아마도 모달 패러다임의 이점에 대한 진정한 감사를 개발하지 않을 것입니다.

내 의견으로는 이러한 차이는 직각이다. 나는 vim과 emacs의 이점이 모두 유효하다는 것을 진술 한 것처럼 믿습니다. 이것은 궁극의 편집자가 아직 존재하지 않는다는 것을 의미합니다. 이맥스는 궁극적 인 편집기를 기반으로하는 가장 쉬운 플랫폼이 될 것입니다. 그러나 모 다르 편집은 이맥스 사고 방식에 확고하지 않습니다. 이맥스 커뮤니티는 미래에 그런 식으로 움직일 수 있지만 그럴 가능성은 희박합니다.

따라서 편집 효율을 높이려면 vim을 사용하십시오. 스크립팅과 에디터 프로그래밍을위한 궁극적 인 환경을 원한다면 emacs를 사용하십시오. 프로그래머 빌리티에 중점을두고 두 가지를 모두 원한다면, 바이퍼 모드와 함께 emacs를 사용하거나 자신의 모드를 프로그래밍하십시오. 당신이 두 세계의 장점을 원한다면, 지금은 운이 없다.


당신은 텍스트 선택 및 복사에 대해 이야기하고 있습니다. 저는 Vim Visual 모드를 살펴 봐야한다고 생각합니다.

비주얼 모드에서는 Vim 명령을 사용하여 텍스트를 선택할 수 있습니다. 그러면 원하는대로 원하는대로 선택할 수 있습니다.

다음과 같은 일반적인 시나리오를 고려하십시오.

다음 일치하는 괄호로 선택해야합니다.

할 수있는 일 :

  • v% 커서가 시작 / 끝 괄호에 있으면 v%
  • 커서가 괄호 블록 안에 있으면 vib

따옴표 사이의 텍스트를 선택하려고합니다.

  • vi " 큰 따옴표 사용
  • 작은 따옴표를 붙이려면 'vi'

중괄호 블록을 선택하려고합니다 (C 스타일의 언어에서 매우 일반적입니다).

  • viB
  • vi{

전체 파일을 선택하려고합니다.

  • ggVG

시각적 블록 선택 은 또 다른 유용한 기능 중 하나입니다. 텍스트의 직사각형 영역을 선택할 수있게하려면 Ctrl - V 를 눌러 시작한 다음 원하는 텍스트 블록을 선택하고 yank, 삭제, 붙여 넣기, 편집 등을 할 수 있습니다. 열 기반 텍스트를 편집하는 것이 좋습니다.


나는 최근에 발견했다 q:. "명령 창"을 열고 가장 최근의 전 모드 (명령 모드) 명령을 보여줍니다. 창 내에서 평소와 같이 이동할 수 있으며, 키를 누르면 <CR>명령이 실행됩니다. 당신도 편집 할 수 있습니다. 복잡한 명령이나 정규식으로 주위를 어지럽히고 모든 것을 다시 입력하고 싶지 않거나 원하는 복잡한 작업이 3 개의 명령 인 경우에 가격이 책정됩니다. 그것은 bash와 거의 set -o vi같지만 vim 자체 (heh!)와 같습니다.

:help q:앞뒤로가는 것에 대해 더 재미있는 부분을 보십시오 .


최고의 포스터와 동의 : - r! 명령은 매우 유용합니다.

가장 자주 나는 그것을 "붙여 넣기"위해 사용합니다 :

:r!cat
**Ctrl-V to paste from the OS clipboard**
^D

이렇게하면 나는 바이올린을 할 필요가 없습니다 :set paste.


단축키는 아니지만 관련이 있습니다.

  1. capslock을 추가 ESC (또는 Ctrl)
  2. 맵 리더를 ","(쉼표)로 바꾸려면 다음 명령을 사용하십시오. let mapleader = ","

그들은 생산성을 높여줍니다.


사용 \c(당신의 IGNORECASE 또는 SmartCase로 설정을 무시) 케이스를 무시하는 검색의 아무 곳. 예 /\cfoo또는 /foo\c일치 foo, Foo, fOO, FOO, 등

\C대소 문자를 강제로 검색하려면 검색의 아무 곳에서나 사용하십시오 . 예 : /\Cfoo또는 /foo\Cfoo와 만 일치합니다.


CTRL+A 는 당신이 서있는 숫자를 증가시킵니다.


<Ctrl> + W, V를 누르면 화면이 세로로 분할됩니다.
<Ctrl> + W, W는 창 사이를 이동합니다

!이 창에서 편집하고있는 스크립트를 실행하기위한 python % [args]

임의의 선을 접을 수있는 비주얼 모드의 ZF


대량 텍스트 조작!

통과 매크로 :

  • 녹음 시작 : qq
  • 물건을하십시오.
  • 녹음 중지 : q
  • 반복 : 그 후 @q(처음) @@.
  • 20 회 반복 : [email protected]@

또는 정규식을 통해 :

  • 물건 교체 : :%s/[fo]+/bar/g

(그러나 경고 : 만약 당신이 후자를한다면, 당신은 2 가지 문제를 가질 것이다.)


이상한 사람이 언급 한 ctags. "exuberant ctags"를 다운로드하여 이미 검색 경로에 포함되어있는 진부한 사전 설치된 버전보다 먼저 배치하십시오. 당신이하고있는 일의 뿌리까지 Cd; 안드로이드 커널 배포판. "ctags -R"을 입력하십시오. "tags"라는 파일에서 해당 dir 아래의 소스 파일 인덱스를 빌드 할 수 있습니다. 여기에는 모든 태그가 포함되어 있으며 언어와 언어의 위치는 하나의 파일로되어있어 언어 간 작업이 쉽습니다.

그런 다음 해당 폴더에서 vim을 열고 일부 명령의 경우 : help ctags를 읽습니다. 자주 사용하는 몇 가지 :

  • 메서드 호출에 커서를두고 CTRL-]을 입력하여 메서드 정의로 이동합니다.

  • 다음을 입력하십시오 : ta name name의 정의로 이동하십시오.


Vim 플러그인

여기에는 많은 좋은 해답이 있고, vi의 선 (zen)에 관한 놀라운 대답이 하나 있습니다. 내가 언급하지 않은 한 가지는 vim이 플러그인을 통해 매우 확장 가능하다는 것입니다. 원저자가 전혀 고려하지 않은 모든 종류의 미친 짓을하는 스크립트와 플러그인이 있습니다. 다음은 믿을 수 없을만큼 편리한 vim 플러그인의 몇 가지 예입니다.

rails.vim

Rails.vim은 tpope가 작성한 플러그인입니다. 그것은 레일 개발을하는 사람들에게 놀라운 도구입니다. 컨트롤러의 메소드에서 관련 뷰로, 모델로, 그리고 해당 모델에 대한 단위 테스트로 쉽게 이동할 수있는 상황에 맞는 불가사의 한 작업을 수행합니다. 레일 개발자로서 수백 시간은 아니더라도 수십 개를 저장했습니다.

gist.vim

이 플러그인을 사용하면 비주얼 모드에서 텍스트 영역을 선택하고 빠른 명령을 입력하여 gist.github.com 에 게시 할 수 있습니다 . 이렇게하면 쉽게 붙여 넣기 작업을 할 수 있으며 IRC 또는 IM을 통해 누군가와 공동 작업을하는 경우 매우 편리합니다.

space.vim

이 플러그인은 스페이스 바에 특별한 기능을 제공합니다. 스페이스 바를 마침표와 비슷한 것으로 바꾸지 만, 반복되는 동작 대신 반복 동작을 반복합니다. 이것은 즉시 정의하는 방식으로 파일을 빠르게 이동하는 데 매우 유용 할 수 있습니다.

surround.vim

이 플러그인은 어떤 방식 으로든 구분 된 텍스트로 작업 할 수있는 기능을 제공합니다. 그것은 괄호 안에있는 것들, 따옴표 안에있는 것들을 나타내는 객체를 제공합니다. 구분 된 텍스트를 다루기 위해 유용 할 수 있습니다.

supertab.vim

이 스크립트는 vim에 멋진 탭 완성 기능을 제공합니다. 자동 완성 기능은 이미 vim의 핵심에 있지만 여러 개의 다른 멀티 키 단축키가 아닌 빠른 탭으로 가져옵니다. 매우 편리하고 재미있게 사용할 수 있습니다. 그것은 VS의 인텔리 센스가 아니지만, 훌륭한 단계이며 탭 완성 도구에서 기대하는 많은 기능을 제공합니다.

syntastic.vim

이 도구는 외부 구문 확인 명령을 vim에 제공합니다. 나는 그것을 개인적으로 사용하지 않았지만 그것에 대해 훌륭한 것을 들었고 개념을 깨기가 어렵습니다. 수동으로 수행하지 않고 구문을 검사하는 것은 시간을 크게 절약 해 주며 구문 버그를 잡는 데 도움이됩니다.

fugitive.vim

vim 내부에서 git에 직접 액세스. 다시 말하지만,이 플러그인을 사용하지는 않았지만 유틸리티를 볼 수 있습니다. 불행히도 나는 svn이 "새로운"것으로 간주되는 문화에 있기 때문에 꽤 오랫동안 직장에서 git을 보지 못할 것이다.

nerdtree.vim

vim을위한 트리 브라우저. 나는 이것을 최근에 사용하기 시작했고, 정말 편리합니다. 그것은 당신이 수직 분할에 나무보기를 넣고 쉽게 파일을 열 수 있습니다. 이것은 자주 건너 뛰는 소스 파일이 많은 프로젝트에 유용합니다.

FuzzyFinderTextmate.vim

이 플러그인은 유지 보수가되지 않았지만 여전히 유용합니다. 그것은 "퍼지"서술 구문을 사용하여 파일을 열 수있는 기능을 제공합니다. 그것은 파일의 드문 드문 한 나무에서 당신이 cruft의 나머지 부분에서 관심있는 파일을 모호하게 할만큼 충분한 문자를 입력해야한다는 것을 의미합니다.

결론

vim에는 많은 도구가 있습니다. 여기에서만 표면을 긁었을뿐입니다. 도메인에 적용 할 수있는 도구를 검색해 볼 가치가 있습니다. 전통적인 vi의 강력한 도구 모음, vim의 개선 된 기능 및 vim을 더욱 확장하는 플러그인의 조합은 지금까지 생각한 텍스트를 편집하는 가장 강력한 방법 중 하나입니다. Vim은 emacs, eclipse, visual studio 및 textmate만큼 강력합니다.

감사

그의 vim duwanis 위한 duwanis 덕분에 많은 것을 배웠고 여기에 나열된 대부분의 플러그인을 빌렸다.


얼마 전에 Vim의 omnicompletion을 발견했는데, 어떤 점에서 제가 약간 흐릿하다는 것을 인정하지만, 삽입 모드에서 Ctrl+ x Ctrl+ u또는 Ctrl+ n/ Ctrl+ p를 매시 켰을 때 놀랍도록 좋은 결과를 얻었습니다 . 그것은 확실히 아니다 IntelliSense , 그러나 나는 아직도 배우고있다.

그것을 밖으로 시도하십시오! :help ins-completion


vim 튜토리얼을 30 분 사용하십시오 (터미널에서 vim 대신 vimtutor를 실행하십시오). 기본 동작과 일부 키 스트로크를 배우게 될 것입니다. 그러면 이전에 사용한 텍스트 편집기 에서처럼 vim에서 생산성을 발휘할 수 있습니다. 그 후, 짐 데니스 (Jim Dennis)의 대답을 다시 읽어보십시오 :)


내가 자주 사용하는 또 다른 유용한 vi "바로 가기"는 'xp'입니다. 이렇게하면 커서 아래의 문자와 다음 문자를 서로 바꿉니다.


몇 가지 생산성 팁 :

똑똑한 움직임

  • *# 커서 아래의 단어를 앞뒤로 검색합니다.
  • 다음 단어로 넘어 간다.
  • 다음 공백으로 구분 된 단어로 W
  • b / e 를 현재 단어의 시작 / 끝으로 변경하십시오. (분리 된 공간에 대해서만 B / E )
  • gg / G 는 파일의 시작 / 끝으로 점프합니다.
  • 일치하는 {..} 또는 (..) 등으로 점프합니다.
  • { / } 다음 단락으로 건너 뜁니다.
  • '. 마지막 편집 라인으로 돌아 가기.
  • g; 마지막으로 편집 한 위치로 다시 이동하십시오.

빠른 편집 명령

  • I 삽입한다.
  • 끝까지 추가합니다.
  • o / O 현재 이후 / 이전에 새 행을 엽니 다.
  • v / V / Ctrl+V 비주얼 모드 (텍스트 선택)!
  • Shift+R 하여 텍스트 바꾸기
  • C 라인의 나머지 부분을 변경합니다.

명령 결합

대부분의 명령은 다음과 같이 양과 방향을 허용합니다.

  • cW = 단어 끝까지 변경
  • 3cW = 3 단어 변경
  • BcW = 전체 단어 시작, 전체 단어 변경
  • ciW = 내부 단어를 변경합니다.
  • ci" =".. "
  • ci( = 사이의 텍스트 변경 (..)
  • ci< = <> 사이의 텍스트 변경 (vimrc에서 set matchpairs+=<:> 필요)
  • 4dd = 4 줄 삭제
  • 3x = 3자를 삭제하십시오.
  • 3s = 3 자로 대체하십시오.

유용한 프로그래머 명령

  • r 한 문자를 대체하십시오 (예 : rd 는 현재 문자를 d 바꿉니다).
  • ~ 대소 문자를 변경합니다.
  • J 두 줄 조인
  • Ctrl + A / Ctrl + X는 숫자를 증가 / 감소시킵니다.
  • . 마지막 명령 반복 (간단한 매크로)
  • == 행 들여 쓰기 수정
  • > 들여 쓰기 블록 (비주얼 모드에서)
  • < 들여 쓰기 블록 (비주얼 모드에서)

매크로 기록

  • q[ key ] 를 눌러 녹음을 시작하십시오.
  • 그런 다음 q 를 눌러 녹음을 중지하십시오.
  • 매크로는 @[ key ] 로 재생할 수 있습니다.

VIM은 매우 특정한 명령과 동작을 사용하여 다음 줄에 대한 정확한 동작을 재생할 수 있습니다. (예 : 추가 끝에서 끝으로, 끝에서 끝으로 커서를 이동하려면 b / e )

잘 만들어진 설정의 예

# reset to vim-defaults
if &compatible          # only if not set before:
  set nocompatible      # use vim-defaults instead of vi-defaults (easier, more user friendly)
endif

# display settings
set background=dark     # enable for dark terminals
set nowrap              # dont wrap lines
set scrolloff=2         # 2 lines above/below cursor when scrolling
set number              # show line numbers
set showmatch           # show matching bracket (briefly jump)
set showmode            # show mode in status bar (insert/replace/...)
set showcmd             # show typed command in status bar
set ruler               # show cursor position in status bar
set title               # show file in titlebar
set wildmenu            # completion with menu
set wildignore=*.o,*.obj,*.bak,*.exe,*.py[co],*.swp,*~,*.pyc,.svn
set laststatus=2        # use 2 lines for the status bar
set matchtime=2         # show matching bracket for 0.2 seconds
set matchpairs+=<:>     # specially for html

# editor settings
set esckeys             # map missed escape sequences (enables keypad keys)
set ignorecase          # case insensitive searching
set smartcase           # but become case sensitive if you type uppercase characters
set smartindent         # smart auto indenting
set smarttab            # smart tab handling for indenting
set magic               # change the way backslashes are used in search patterns
set bs=indent,eol,start # Allow backspacing over everything in insert mode

set tabstop=4           # number of spaces a tab counts for
set shiftwidth=4        # spaces for autoindents
#set expandtab           # turn a tabs into spaces

set fileformat=unix     # file mode is unix
#set fileformats=unix,dos    # only detect unix file format, displays that ^M with dos files

# system settings
set lazyredraw          # no redraws in macros
set confirm             # get a dialog when :q, :w, or :wq fails
set nobackup            # no backup~ files.
set viminfo='20,\"500   # remember copy registers after quitting in the .viminfo file -- 20 jump links, regs up to 500 lines'
set hidden              # remember undo after quitting
set history=50          # keep 50 lines of command history
set mouse=v             # use mouse in visual mode (not normal,insert,command,help mode


# color settings (if terminal/gui supports it)
if &t_Co > 2 || has("gui_running")
  syntax on          # enable colors
  set hlsearch       # highlight search (very useful!)
  set incsearch      # search incremently (search while typing)
endif

# paste mode toggle (needed when using autoindent/smartindent)
map <F10> :set paste<CR>
map <F11> :set nopaste<CR>
imap <F10> <C-O>:set paste<CR>
imap <F11> <nop>
set pastetoggle=<F11>

# Use of the filetype plugins, auto completion and indentation support
filetype plugin indent on

# file type specific settings
if has("autocmd")
  # For debugging
  #set verbose=9

  # if bash is sh.
  let bash_is_sh=1

  # change to directory of current file automatically
  autocmd BufEnter * lcd %:p:h

  # Put these in an autocmd group, so that we can delete them easily.
  augroup mysettings
    au FileType xslt,xml,css,html,xhtml,javascript,sh,config,c,cpp,docbook set smartindent shiftwidth=2 softtabstop=2 expandtab
    au FileType tex set wrap shiftwidth=2 softtabstop=2 expandtab

    # Confirm to PEP8
    au FileType python set tabstop=4 softtabstop=4 expandtab shiftwidth=4 cinwords=if,elif,else,for,while,try,except,finally,def,class
  augroup END

  augroup perl
    # reset (disable previous 'augroup perl' settings)
    au!  

    au BufReadPre,BufNewFile
    \ *.pl,*.pm
    \ set formatoptions=croq smartindent shiftwidth=2 softtabstop=2 cindent cinkeys='0{,0},!^F,o,O,e' " tags=./tags,tags,~/devel/tags,~/devel/C
    # formatoption:
    #   t - wrap text using textwidth
    #   c - wrap comments using textwidth (and auto insert comment leader)
    #   r - auto insert comment leader when pressing <return> in insert mode
    #   o - auto insert comment leader when pressing 'o' or 'O'.
    #   q - allow formatting of comments with "gq"
    #   a - auto formatting for paragraphs
    #   n - auto wrap numbered lists
    #   
  augroup END


  # Always jump to the last known cursor position. 
  # Don't do it when the position is invalid or when inside
  # an event handler (happens when dropping a file on gvim). 
  autocmd BufReadPost * 
    \ if line("'\"") > 0 && line("'\"") <= line("$") | 
    \   exe "normal g`\"" | 
    \ endif 

endif # has("autocmd")

설정은 ~/.vimrc 또는 시스템 전반의 /etc/vimrc.local/etc/vimrc.local 하고 /etc/vimrc 파일에서 다음을 사용하여 읽을 수 있습니다.

source /etc/vimrc.local

( # 주석 문자를 " VIM에서 작동하게하려면 " # 로 바꿔야 할 것입니다. 여기서 적절한 구문 강조를하고 싶습니다).

여기에 나열된 명령은 매우 기본적이고 지금까지 내가 사용하는 주요 명령입니다. 그들은 이미 모든 멋진 것들을 알 필요없이 나를 더 생산적으로 만듭니다.


당신은 생산적인 지름길에 대해 물어 보았습니다. 그러나 나는 당신의 진정한 질문은 다음과 같습니다 : vim은 가치가 있습니까? 이 질문에 대한 대답은 -> "예"입니다.

당신은 두 가지를 알아 차렸을 것입니다. Vim은 강력하고 vim은 배우기가 어렵습니다. 그것의 힘의 대부분은 확장 성과 명령의 끝없는 조합에 있습니다. 압도 당한다. 천천히 가시오. 하나의 명령, 한 번에 하나의 플러그인. 그것을 과장하지 마십시오.

vim에 투자 한 모든 투자금은 천 배를 지불하게됩니다. 당신은 죽기 전에 많은 시간 동안 텍스트 편집기 안에있게 될 것입니다. Vim이 당신의 동반자가 될 것입니다.


가장 쉬운 옵션은 $를 입력하는 것 입니다. 텍스트 블록을 사용하는 경우 단락을 앞뒤로 이동하려면 {} 명령을 사용하십시오.





vim vi