vi에서 다중 파일 작업을 하려면?

fairycat의 이미지

리눅스 일쥘째라 영 힘들군요. 지금 kde에서 kde용 콘솔에서 vi 여러개 띄우고
작업하고 있는데요. 다중 파일 작업(카피앤패이스트)을 하려고 하는데 붙이기
를 하면 참.. -_-; 윈도우처럼 깔끔하게 안붙네요. 이런 작업을 하기 쉬운 리누기
용 에디터가 있을까요? 검색해보니 이맥스가 다중파일 작업하기 좋다던데..
vi에서 그냥 할 수 있는 방법은 없을까요? 코딩에 있어서 카피앤패이스트가 얼
마나 자주 일어나는 일인데.. vi에서 이런게 지원이 안될리도 없고.. vi 사용법
을 봐도 같은 파일 내에서 복사 붙이기만 나와 있네요. 도움 부탁드립니다.

jemiro의 이미지

w12ard wrote:
리눅스 일쥘째라 영 힘들군요. 지금 kde에서 kde용 콘솔에서 vi 여러개 띄우고
작업하고 있는데요. 다중 파일 작업(카피앤패이스트)을 하려고 하는데 붙이기
를 하면 참.. -_-; 윈도우처럼 깔끔하게 안붙네요. 이런 작업을 하기 쉬운 리누기
용 에디터가 있을까요? 검색해보니 이맥스가 다중파일 작업하기 좋다던데..
vi에서 그냥 할 수 있는 방법은 없을까요? 코딩에 있어서 카피앤패이스트가 얼
마나 자주 일어나는 일인데.. vi에서 이런게 지원이 안될리도 없고.. vi 사용법
을 봐도 같은 파일 내에서 복사 붙이기만 나와 있네요. 도움 부탁드립니다.

KDE를 사용한다면,
엑스윈도의 기본 기능인 마우스로 Copy & Paste를 사용하면 될듯하군요.
엑스에서는 텍스트를 드래그 하는것만으로 Copy가 된것입니다.
그리고 붙여넣을 곳에 포커스를 준후,
vi 같은 경우에는 vi가 떠있는 터미널에서 vi의 insert 모드로 해놓은후,
물론 붙여넣을 곳에 커서를 두고,
마우스의 가운데 버튼을 눌려주면 그만입니다.

요약하자만,
마우스 왼쪽 버튼을 누르고 드래그(COPY))
마우스 가운데 버튼을 누르면 (Paste))

저는 GNOME을 사용하지만 KDE도 차이 없는걸로 알고 있습니다.

무혼인형의 이미지

jEdit 한번 써보세요 :)

저도 vi 에 별로 익숙치 못해서.. 손발이 고생하고 있습니다. =_=;

에고고고......

kihoori의 이미지

vi는 카피엔드 패스트가

yy 하면 ctrl + c 효과

cc 하면 ctrl + x 효과

p 하면 ctrl + p 효과

입니다요..

자세한거는

http://kldp.org/KoreanDoc/html/Vim_Guide-KLDP/Vim_Guide-KLDP.html

윈도우 나누기
http://bbs.kldp.org/viewtopic.php?t=1145&sid=62cd825f1ac5b1f6e1d6ebe49ae0f984

송지석의 이미지

    1) 나는 코딩할 때 탭 대신 스페이스바로 indenting 한다.
이때는 별 사항 없습니다.
Quote:
vi에서 :set paste

하시면 자동 indenting이 꺼지고 붙여넣기 모드로 갑니다.

그렇게 하시고 i로 입력 모드 들어가신 다음

작업하시는 다른 터미널 창에서 복사할 부분을 마우스로 주욱 끌어다가 붙일 창으로 돌아가

가운데 버튼으로 붙여넣기 하시면 됩니다.

다 붙이신 다음엔 :set nopaste를 하시면 되지요.

    2) 나는 코딩할 때 탭을 쓴다.
이경우엔 그냥 마우스로 끌어다 붙이는 것은 탭 대신에 스페이스바로 붙기 때문에 좀 다른 방법을 사용하셔야 합니다.
-한창에서 다중 파일 작업하기- 입니다.

그리고 이것은 kltp에서 찾아보시면 좀 도움을 얻으실 수 있습니다.
(코딩을 편하게 하기 위한 또다른 준비물 : kltp에서 개발자를 위한 vi 매크로)

a.c, b.c, c.c 세개의 소스 파일이 있는 경우

    *1번 방법: 버퍼간 이동
Quote:
먼저 vi a.c
로 하나의 파일을 엽니다.
그리고
:e b.c
:e c.c
로 파일을 더 엽니다.

파일간의 이동은
:bn
:bN
을 통해서 하실 수도 있고 control+6 (=control+^) 로 양 파일 사이를 왔다갔다 하실 수도 있습니다.

일단 그렇게 해놓고 자신이 복사할 부분이 있으면 메뉴얼에서 보신대로 블럭 설정을 하든 yy를 하든 해서 복사합니다.

그리고 :bn 등으로 다른 파일로 가셔서 원하는 위치에 p로 붙여넣기를 합니다.

============
저도 vi 고수라고는 못하기 때문에 더 좋은 단축키가 있는 지는 모르겠네요.
(그외에 이동 명령은 상당히 많습니다. bf(처음 버퍼로) bl(마지막 버퍼로)등등 자세한 사항은 인터넷 검색이나 vi에서 ":h :b" 를 통해 찾아보실 수 있습니다.
무슨 파일들이 열렸는지, 그 버퍼 번호가 몇인지도 알 수 있는 명령어가 있는데 잊어버렸네요..) ==> 아 찾았습니다. :ls하면 현재 버퍼 목록이 나옵니다. :b1하면 1번 버퍼로, :b2하면 2번 버퍼로 갑니다.


    *2번 방법: 창 나누어서 편집하기
Quote:
여기 자유강좌에 pynoos님이 올리신 vim팁 시리즈 중에 다중 파일 편집이 있습니다.

창을 최대로 키우셔서 작업을 편하게 하시고

vi a.c로 파일을 엽니다.

그리고 그 설명대로 창을 가로 또는 세로로 나누셔서 다른 파일을 열어둡니다.(:sp)

그리고 한 창에서 복사하셔서 옆/및창으로 붙여넣기를 하시면 됩니다.

창 간의 이동은 control+ww 정도입니다.

그리고 vi로 작업하실 때 ctags와 함께 작업하시면 함수 선언 위치를 찾아가고 하는 것이 참 쉽습니다.

    *3번째 방법: gvim 사용하기
Quote:
gvim을 사용합니다.
gvim에서 위의 1번 방법처럼 여러 파일을 열고 위의 메뉴바에 보면 buffers라는 메뉴가 있습니다.

그걸 눌러보면 점선에 가위표가 있는데 이 가위표를 눌러보면 버퍼 메뉴가 따로 떨어져 나옵니다. next, prev, 바로 선택등 다 할 수 있죠.

마우스 사용이 되기 때문에 주욱 끌어서 붙여넣기도 됩니다.

죽 끌어서 선택하면 저절로 visual 세팅 되고 여기서 y를 누르면 복사되고 다른 창에서 p로 붙여넣기 하실 수 있습니다.

=============
2번 방법처럼 창을 갈라서 할 수 도 있습니다.
마우스가 되니까 클릭하면 옆의 창으로 옮겨져서 더 쉽습니다.


이맥스.. 좋을 지도.. 하지만 저는 vi밖에 몰라서.. 제 손에 익은 것만 사용하게되네요..

ps. 한줄 팁 : #include "api/a.h"에서 api/a.h를 바로 편집 하려면 커서를 파일 이름위에 두고 gf 하시면 됩니다.

[/][/][/][/][/]
sunyzero의 이미지

지저분하게 된 indent나 혹은 안되어있는 indent는 다시 할 수 있습니다. 예전에 누구 줄려고 작성해놨던 글에서 일부분 따다가 붙여놓겠습니다.

Quote:

1. indent motion with visual line : =
visual mode or visual line 에서 (v , shift - v) 라인을 선택한뒤 '=' 를 눌러서 재정렬을 한다. 보통 어디서 따온 소스라든지, 복사해온 소스는 indent가 엉망일 수 있다.(개인적으로 indent 엉망으로 하는 사람은 때려주고 싶다. -_-)
int
myfunc(char *s)
{
int i;
printf();
for (;;) {
if (i > 0) {
} else {
if (j <= 0) {
}
}
printf();
}
}

위와 같이 지저분하게 indent가 안되어있다면 shift-v 로 visual line 모드를 선택한뒤 해당 블럭을 선택하고 = 키를 눌러주면 아주 깔끔하게 indent를 넣어서 정렬해준다.

때려주고 싶다는 말은 정말입니다. indent엉망이면 소스 정말 분석하기 짜증납니다.

========================================
* The truth will set you free.

송지석의 이미지

옷 정말 좋은 팁을 가르쳐주셨습니다. 고맙습니다. ;)

fairycat의 이미지

제가 질문글의 성격을 잘못 생각해서 프로그래밍 qna란에 올렸던
글이 여기 와있었군요. :o 이렇게 많은 리플이 달린줄 모르고 너무
허접한 질문이라.. :roll: 관리자님께서 지우신줄 알고 구석에 쳐박혀
찔찔 짜고 있었는데.. :wink: 답변 주신 분들 감사합니다. 역시 vi에도
인덴트의 자동 정렬 기능이 있었군요. visual c++에서도 alt+f8 무지
자주 썼었는데.. 8) 모두 복받으세요~ :D

가이: 리여.. 확실히 너는 네지와는 다르다
록리: 위로라면 집어치세요..
가이: 위로같은게 아니다 ! 너는 네지와는 다르게 천재도 아니고 재능도 없다 하지만 너는 노력의 천재다..

- 나루토 <키시모토마사시>

keizie의 이미지

vi.kldp.org 정도면 충분히 쓸만한 내용에, 게시판도 있습니다.

reshout의 이미지

처음에는 익숙하지 않아서 조금 불편하지만 익숙해지면
무엇보다도 편리합니다 개인적으로 vi 를 좋아하거든요^^

화면을 분할해서 사용하는 법인데

sp . 하면 화면이 아래위로 분할되면서

파일을 고를 수있는 창이 위 쪽에 생기게 되고 다중 작업할 파일을 골라주시고

sp <filename> 으로 바로 파일이름을 적어주어도 됩니다

창간의 이동은 Ctrl + w + 화살표 또는(w) 입니다

제가 주로 복사할때는 V(대문자)로 블록 설정하고

y 키로 복사해서 버퍼에 저장한 다음

작업 창을 변경하고

p or P 로 붙여넣기 합니다. (대소문자의 차이는 붙여지는 위치의 차이)

v 말고 V로 복사했을때는 indenting 도 잘 맞춰서 복사가 됩니다~

도움이 되었는지 모르겠네요~ ^^;;

fairycat의 이미지

추가 답변 주신 분들 감사합니다.
리눅스 커뮤니티는 정말 대단하군요.
덕분에 이젠 분할 창 사용해서 원하던 결과를 얻어내며
만족스럽게 작업하고 있습니다.
저도 이제 vim 의 기능에 슬슬 재미를 붙이게 된걸까요?
8)

가이: 리여.. 확실히 너는 네지와는 다르다
록리: 위로라면 집어치세요..
가이: 위로같은게 아니다 ! 너는 네지와는 다르게 천재도 아니고 재능도 없다 하지만 너는 노력의 천재다..

- 나루토 <키시모토마사시>

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.