vi 쓰시는 분들에게... 방향키는 절대로 안쓰는게 좋습니까?

hsnks100의 이미지

정말 궁금합니다.

입력모드에서 커서 왔다갔다 하면서 편집하고 싶은 욕망이 강하게 드는데요. 억제를 해야할까요?

참고 쓰다보면 밝은 날이 옵니까? 너무 간질간질합니다.

사소한거 하나하나 esc 눌러서 hjkl 로 이동하는데, ... 제가 하는 방법이 맞는지 잘 모르겠습니다.

조언 부탁합니다!

익명 사용자의 이미지

그냥 편하게 사용합니다. 어차피 vi만 사용하는 것도 아니라서 문서편집이나

다른데서 vi 키가 먹는 것도 아니라서 둘다 필요한 상황에서 편하게 사용합니다. 그리고

키보드 중앙에만 계속 손올리고 사용하면 어깨랑 손목도 않좋아집니다.

저는 키를 다시 디파인해서 j, l로 좌우, i,k로 위 아래 이동합니다.

^space로 편집모드와 명령모드를 왔다갔다 하게 했구요.. ^j로 back space ^k로

delete를 사용합니다. shift-i,shift-k를 이용해 page 단위 스크롤로 사용합니다.

명령모드에서 t 누르면 우측 tab으로 shift-t를 누르면 좌측 텝으로 이동하게 해서

제 맘에 맞도록 변형해서 사용합니다.

주로 편짐위치 찾거나 read only 파일 볼 때는 화살표키 보다는 ijkl 을 많이 사용

그래도 커서키가 편하긴 합니다. 편집모드나 명령 모드 둘다 사용하니 혼란도 없고

그리고 마우스도 잘 사용합니다. 상황에 따라 편한 인터페이스가 있는 것 같습니다.

HESS의 이미지

바꿀수 있다면 하는 방법좀 알려주실수있나요?
그리고 ^space에서 ^의 의미가 뭔가요? shift + 6 + space 하라는건가요?

세벌의 이미지

거기서 ^는 Control 키를 뜻하는 것 같네요.

red10won의 이미지

최신 리눅스 bash같은경우는 괜찮은데..

가끔 오래된 *nix vi들중 방향기가 안먹히는것들이 있습니다.
SE나 SI로 여러가지 서버 접해본다면 hjkl쓰시는게 좋습니다^^

Prentice의 이미지

제가 쓰는 해결책(?)은 대충 다음과 같습니다.

  1. 키를 좀 더 누르기 편하게 변경
    • Caps Lock 키를 <Esc> 키로 작동하게 만든다거나
    • ` 키와 <Esc> 키를 서로 바꾼다거나
  2. 반복/이동 키 적극 활용
    • hjkl 대신 3h, 3j, 3k, 3l 등등 활용
    • hl 대신 w, b, e로 단어 이동
    • hl 대신 f, t, F, T로 글자 검색 이동
      • 예: fa를 치면 커서 다음에 오는 첫 a로 이동
      • 예: ts를 치면 커서 다음에 오는 첫 s 바로 전으로 이동
      • ; 키로 반복
    • 3w, 3f 등등도 활용
  3. 키보드 중앙에 손을 올리고 사용하는 것이 가장 편안한 자세가 되도록 의자/책상 높낮이 최적화
dgkim의 이미지

hjkl 익숙해지면 그다지 불편하다고 느끼지 않을 수 있습니다.

윈도우와 linux를 같이 쓰다 보면 어느 순간, 메모장에서 :q 하고 있는 자신을 발견합니다.

page up, page down의 경우도 ctrl+f ctrl+b 가 익숙하면 편합니다.
노트북의 경우 키배열이 특징이 있는데, vi키는 거의 표준 키배열에 영숫자 안에서 사용하니.

0 줄 맨앞으로 갈 때, A 맨 뒤에 넣을 때, $ 맨 뒤로 이동할 때,

옆으로 이동할 때, lwlwlwlwlwlw 통해서 이동하기도 하고,

찾기도 /, ? 통해서 자유롭게 이동하고,

:%s 같은 걸로 쉽게 문자열 바꾸고,

123G 같은 걸로 라인 쉽게 이동하고,

복사할 때도, 마우스로 어렵게 드래그하는 것이 아니라, 5yy 같이 눈대중으로 라인수 잡아서 복사할 수 있지요.

심지어, 메모장정도만 있는 PC에는 gvim을 설치하여 사용합니다.
최소한 메모장보다는 편하지요.

hjkl i a x d c w 정도로 시작해 보십시오.

vi에서 방향키를 사용하려고 하지마시고,
vi를 익히던가 nano gedit 같은 걸로 갈아타시면 됩니다.

--
http://www.dgkim.net/

마잇의 이미지

입력 모드에서 잠깐의 이동을 하고 싶을 때 좀 번거로울 때가 있습니다. "Esc, 할 것 인가 말 것 인가"

다른 유닉스들도 그렇고 많은 리눅스 배포본들이 기본적으로 vim의 풀 버전을 설치하질 않습니다. vim이 아니고 vi(보통 vim을 최소 옵션으로 컴파일한)만 설치하고 vim은 따로 설치해야 합니다. vi는 방향키가 먹질 않습니다. 방향키에 익숙해졌다면 이럴 때 좀 답답할 수 있습니다. 난 내 컴퓨터 말고는 안 만진다 하시면 상관 없습니다.

간단한 이동이라면 입력 모드에서 C-o를 사용하는 방법도 괜찮습니다. C-o는 노말 모드 명령 하나를 수행하고 다시 입력 모드로 들어 갑니다. C-o p하시면 Esc p i 와 같습니다. C-o /keyword 하시면 Esc /keyword i 이렇게 한 것과 같습니다. 비슷한데 마지막에 입력 모드로 들어가는 키가 하나 생략 됩니다. 이걸 easymotion 플러그인과 같이 사용하면 잘 어울립니다.

easymotion 플러그인은 단어, 글자, 행 단위의 이동 명령들을 진짜 끝내주게 만들어 줍니다. 현재 화면에 보이는 곳 중에서 b, w, e, ge, j, k, f, F, t, T 이런 키들로 이동 가능한 위치 어느 곳이나 한 번에 갈 수 있게 해줍니다. 기억할 것 하나는 저 키들을 눌르기 전에 <leader><leader>를 누릅니다. 저의 경우는 ,,(콤마콤마).

  • ,,j - 현재 행 아래 모든 행의 제일 앞 한 칸이 하이라이트 되면서 랜덤한 알파벳 한 글자로 바뀝니다. 내가 가려고 하는 행의 하이라이트 된 글자가 f다 그러면 f를 누르는 순간 그 행으로 갑니다.
  • ,,k - 마찬가지지만 반대 방향으로 동작 합니다.
  • ,,w - w는 원래 word의 제일 앞 글자로 전진 이동 합니다. ,,w 하면 현재 커서 앞의 모든 word의 앞 글자가 랜덤한 글자로 바뀌면서 하이라이트 됩니다. 원하는 위치의 글자를 누르면 그 곳으로 이동. 24w 이런 걸로 가능한데 24를 눈으로 세고 있기가 현실적으로 힘들죠. 그래서 easymotion이 쓸만 합니다.

b, e 등등 다 마찬 가지의 원리 입니다. w, b인지 생각조차 하기 싫으면 f,F만 기억하면 됩니다. 그냥 원하는 곳의 글자로 검색해서 갑니다.

easymotion과 C-o와 결합하면 입력 모드에서 상당히 랜덤한 이동을 영화의 한 장면처럼 할 수 있습니다.

C-o ,,F ( g arg1, Esc g;

정말 한 폭의 그림 같지 않나요?

다른 방법은 readline(emacs) 스타일의 단축키를 지정해서 사용하는 겁니다. readline이나 emacs에 대해 모르시더라도 터미널(쉘)에서 작업을 해보셨으면 이미 몇 가지 단축키를 알고 계실 겁니다. 그냥 아무키나 지정하면 되지 왜 굳이 readline이냐?

readline 단축키들은 터미널에서 사용자 입력을 받는 거의 대부분의 프로그램들에 의해 사용되고 직접 readline 라이브러를 사용하지 않더라도 거의 비슷한 단축키를 자체적으로 지원해 줍니다. 익혀두면 터미널 환경에서는 유비쿼터스 합니다. 먹어준다는 표현이 이럴 때 어울리겠군요. gtk도 키바인딩을 emacs로 지정하면 이런 단축키들을 브라우저를 포함한 많은 gtk 프로그램의 입력창에서 사용할 수 있습니다.

제가 자주 쓰는 키만 몇 가지 나열해 보겠습니다.

# 이동
C-b,f 앞,뒤 한 글자
M-b,f 앞,뒤 한 단어
C-p,n 위,아래 한 줄(이 키들은 vim의 기본 설정을 덮어 씁니다)
# 수정
C-h,d Backspace, Delete(C-h는 vim 기본 설정)
C-w,M-d 위와 같으나 단어 단위로(C-w는 vim 기본 설정)
C-u,k 커서 위치에서 앞, 뒤로 끝까지 삭제(C-u는 vim 기본 설정)

inoremap을 사용하셔서 직접 맵핑하셔도 되고 https://github.com/tpope/vim-rsi 플러그인을 쓸 수도 있습니다. 이 플러그인의 설정은 위의 단축키와는 약간 다른데(C-n,p -> M-n,p) command 모드에서도 되도록 맵핑해 줍니다.

혹시나 hjkl이나 방향키를 주된 이동 수단으로 사용하시고 다른 키들은 잘 쓰시지 않는다면 :h motion.txt를 틈날때 마다 자주 읽으시라고 말씀 드리고 싶습니다. vim은 글자 단위 보다는 논리적인 단위로 접근할 때 그 강점이 더 잘 발휘 됩니다.

특히나 커서를 이동하는 목적이 그 자리에서 입력을 바로 시작하는 것이 아니라 삭제나 수정 혹은 선택을 하기 위한 밑준비인 경우가 많은데 이런 조합을 묶어서 처리하는 키들이 많이 있습니다.

1. Motions and operators |operator|
2. Left-right motions       |left-right-motions|
3. Up-down motions      |up-down-motions|
4. Word motions         |word-motions|
5. Text object motions      |object-motions|
6. Text object selection    |object-select|
7. Marks            |mark-motions|
8. Jumps            |jump-motions|
9. Various motions      |various-motions|

5, 6에 있는 키들이 정말로 많이 유용하고,

이런 플러그인과 함께 쓰면 효과가 엄청 증폭 됩니다. surround는 각종 태그, 괄호, 따옴표에 찌든 현대인의 지친 마음을 따듯하게 surrond 해주는 플러그인입니다.

"아까 거기로 가고 싶다" - 묻지마 이동의 꽃, 8도 꼭 읽어 보세요. 막연하게 어딘가 가고 싶을 때 눌러 보면 마법처럼 그곳으로 데려다 주는 몇 가지 유용한 키들을 알려 줍니다.

잊지 마세요. 당신도 영화의 한 장면 처럼 이동할 수 있습니다.


--
마잇

hsnks100의 이미지

일일이 답변 못 달아줘서 죄송합니다.

답변 다신 모든분들 감사합니다. vi 에 한층 더 다가선거 같네요. 고맙습니다~!

장문의 글을 달아주신 마잇님 감사합니다. 꼼꼼히 다 읽었습니다.

----------------------------------------------------
개인 블로그: https://kangssu.com

M.W.Park의 이미지

정답을 알려드립니다.
vi는 안쓰는게...
emacs를 쓰는게...

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

dgkim의 이미지

심지어 twitter, facebook, 9gag 에서 j, k 사용 가능합니다.

--
http://www.dgkim.net/

익명 사용자의 이미지

gmail, tumblr에서도 가능합니다.

jjlounger의 이미지

vimperator, vimfx,
vimium 같은 애드온을 깔아서 vi키로 웹서핑을 합니다.

hsnks100의 이미지

글쓴이 입니다. 지금은 vim 의 열렬한 팬이 되었습니다. hjkl 없이는 vim 을 쓸 수가 없군요.

모든 에디터를 vimming 합니다. visual studio + vsvim, eclipse + vrapper, xcode + xvim.

vim 나홀로 쓰는것도 아주 만족스럽습니다.

sublime 에디터도 병용해서 쓰는데 여기서도 vim 플러그인 찾습니다.

정복하길 잘했습니다. 가끔 텍스트 입력하는데 vim operation 이 안되는 환경에 가면 말 못할 답답함이 느껴집니다.

----------------------------------------------------
개인 블로그: https://kangssu.com

dontdieych의 이미지

vim operation 이 안되는 환경에 가면 말 못할 답답함이 느껴집니다.

vim을 배우고 이 점이 가장 불안 합니다.

Necromancer의 이미지

방향키로 이동하는것은 vim에서만 되는거고요 freebsd나 다른 상용 유닉스에 딸려오는 vi들은 방향키 전혀 안 먹습니다.
하나 더해서 v키로 영역설정하는것도 vim만 됩니다. 오리지날 vi는 물론 elvis같은 다른 vi클론들도 다 안되는 vim만의 특화기능.

Written By the Black Knight of Destruction

hsnks100의 이미지

간만에 생각이 나서 검색해보다가 제가 쓴글이 있네요.

이젠 vim operation 없이는 뭘 못하겠습니다... 가장 걱정되는 부분이네요.

예전에 only insert mode 에서 어떻게 작업을 했는지 기억이 잘 안납니다. 제가 home, end, ctrl, insert, delete 키를 조합해서 굉장히 키보드 타이핑을 화려하게 하는 스타일이었는데

또 문제는 노트북이나 표준 키보드가 아니면 너무 힘들었던 기억이 있네요. (미니 키보드 같은 경우)

이젠 vim operation 만 있으면 걱정이 없는데, 반대로 그 점이 가장 불안합니다.

현업에서는 vim 플러그인만 깔면 되는데, 그게 아닌 경우에 다른 사람 컴퓨터로 뭐 봐줄 때는 그냥 키보드 잡고 타이핑을 못하고 있네요.

세벌식 유저에 vim 유저가 되니까 일반 다른 컴퓨터에서 타이핑이나 글을 쓸일이 있으면 글 구성 생각하는것만 해도 버거운데

머리속으로 두벌식, vim 이 아니니까 다른식으로 타이핑을 해야한다는 압박감 때문에 너무 힘듭니다.

그냥 세벌식, vim 을 모르는 상황으로 갔을 때가 암것도 몰라서 맘이 편했던것 같네요.

그나마 드보락도 6개월 가량 써봤는데 환경마다 너무 단축키 환경이 달라서 도저히 적응을 못하고 현재는 qwerty 를 씁니다. 콜맥도 1년가량 썼는데 결국 qwerty...

다시 qwerty 로 돌아온게 다행이네요.

또한, 세벌식 최종썼다가 신세벌식 썼다가 2015 세벌식 썼다가 지금은 세벌식 390 씁니다.

이 처럼 자기만의 환경 세팅이 너무 강해서 겪은 힘든 일 있으신가요?

----------------------------------------------------
개인 블로그: https://kangssu.com

세벌의 이미지

저는 세벌식최종, 드보락, 가끔가다 쿼티 씁니다. 콜맥은 안 써봤습니다. 처음엔 평범하게 두벌식과 쿼티로 시작.

드보락 자판 자체는 좋은데 환경이 다른 곳에서는 불편함이 있습니다.
예를 들어 어떤 프로그램에서 Ctrl-C를 눌러야 할 때 키보드에서 c를 드보락 기준으로 해야 할까요? 쿼티 기준으로 해야 할까요? 프로그램에 따라 다르더군요...

세벌식 자판도 그 자체는 좋은데 환경에 따라 불편함이 있습니다.
어떤 입력 항묵에 숫자만을 입력하도록 제한한 경우 두벌식기준으로 숫자 자리를 눌러야만 되게끔 만든 프로그램이 있지요. 일부러 그렇게 만들기도 힘들겠구먼.

이런 저런 불편함이 있어도 세벌식과 드보락을 쓰는 편함이 불편함보다 크기에 세벌식과 드보락을 버릴 생각은 없네요.

hsnks100의 이미지

드보락도 써봤으나 ctrl+c, v 가 너무 힘들어서 포기했습니다.

단축키 배열이 너무 판이하게 다른건 적응이 안되더라고요.

----------------------------------------------------
개인 블로그: https://kangssu.com

익명 사용자의 이미지

기본 설치된 vim은 i 모드중 방향키 사용시 깨진 글자가 주루ㅜ룩~~ 넘처나는 현상을 보시게 됩니다.
dd 를 연발해서 지워도 나중에 방향키를 누르면 또 나옵니다.

그러나 apt-get 으로 다시 설치하면 동일 버전임에도 그런현상이 없어지고요..

익명 사용자의 이미지

제 경우, AutoComplPop라는 자동완성 플러그인을 사용합니다. 그리고 많은 분들이 사용하고 계시리라 생각합니다.

이 경우 플러그인이 추천하는 항목 중 하나를 선택할 때 방향키를 사용해야만 하지 않나요? 다른 방법이 있나요?

hsnks100의 이미지

c-n c-p 입니다. emacs 의 그것이죠.

----------------------------------------------------
개인 블로그: https://kangssu.com

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.