출처 http://c-faq.com

Q: I'm trying to declare a pointer and allocate some space for it, but it's not working. What's wrong with this code?

char *p;
*p = malloc(10);

 => 언뜻 보기에는 될것 같이 생겼다..

A: The pointer you declared is p, not *p. When you're manipulating the pointer itself (for example when you're setting it to make it point somewhere), you just use the name of the pointer:

        p = malloc(10);

It's when you're manipulating the pointed-to memory that you use * as an indirection operator:

        *p = 'H';

(It's easy to make the mistake shown in the question, though, because if you had used the malloc call as an initializer in the declaration of a local variable, it would have looked like this:

        char *p = malloc(10);

When you break an initialized pointer declaration up into a declaration and a later assignment, you have to remember to remove the *.)

In summary, in an expression, p is the pointer and *p is what it points to (a char, in this example).

See also questions 1.21, 7.1, 7.3c, and 8.3.

References: CT&P Sec. 3.1 p. 28

'Language > C' 카테고리의 다른 글

C FAQ (포인터 증가에 대해서)  (0) 2012.07.12
C-FAQ 어찌되었건 pointer 쓰면 정말 좋은가?  (0) 2012.07.12
C FAQ (malloc 오류)  (0) 2012.07.12
C FAQ (포인터 선언 에러)  (0) 2012.07.12
mkfifo 함수 예제  (0) 2012.07.06
popen 함수 pclose 함수 예제  (0) 2012.07.06

출처 : http://c-faq.com/

Q: What's wrong with this declaration?

char* p1, p2;

I get errors when I try to use p2.


A: Nothing is wrong with the declaration--except that it doesn't do what you probably want. The * in a pointer declaration is not part of the base type; it is part of the declarator containing the name being declared (see question 1.21). That is, in C, the syntax and interpretation of a declaration is not really

        type identifier ;

but rather

        base_type thing_that_gives_base_type ;

where ``thing_that_gives_base_type''--the declarator--is either a simple identifier, or a notation like *p or a[10] or f() indicating that the variable being declared is a pointer to, array of, or function returning that base_type. (Of course, more complicated declarators are possible as well.)

In the declaration as written in the question, no matter what the whitespace suggests, the base type is char and the first declarator is ``* p1'', and since the declarator contains a *, it declares p1 as a pointer-to-char. The declarator for p2, however, contains nothing but p2, so p2 is declared as a plain char, probably not what was intended. To declare two pointers within the same declaration, use

        char *p1, *p2;

Since the * is part of the declarator, it's best to use whitespace as shown; writing char* invites mistakes and confusion.

See also question 1.13.

Additional links: Bjarne Stroustrup's opinion

'Language > C' 카테고리의 다른 글

C-FAQ 어찌되었건 pointer 쓰면 정말 좋은가?  (0) 2012.07.12
C FAQ (malloc 오류)  (0) 2012.07.12
C FAQ (포인터 선언 에러)  (0) 2012.07.12
mkfifo 함수 예제  (0) 2012.07.06
popen 함수 pclose 함수 예제  (0) 2012.07.06
pipe 함수 예제  (0) 2012.07.06

원본 출처 : http://bestheroz.blog.me/96293248


nmap으로 스캔하는 방법

"nmap -p 1-65535 localhost" 또는 "nmap -p 1-65535 공인IP" 실행하면 현재 자신의 시스템에 어떤 포트가 있는지 모든 포트에 대해 확인 가능하다. 만약 아무런 옵션을 주지 않고 "nmap localhost" 실행하면 사전에 정의된 Well Known 포트에 대해서만 스캔을 한다는 것을 주의하자. 또한 "nmap -p 21,23,53,80" 같이 스캔할 경우에는 대역( 부터까지 모든 호스트) 대해 21,23,53,80번등의 특정 포트가 열려있는지에 대해서만 스캔을 하게 된다.



netstat -l 확인해 보는 방법

% netstat -lnp

netstat에서는 많은 옵션을 제공하고 있는데, 현재 시스템 상에서 특정 포트를 점유하여 소켓 데몬 형태로 대기중인 서비스에 대한 사항은 listen 의미인 -l 옵션을 주면된다. 더불어서 -p 옵션을 주면 해당 포트를 사용 중인 program 이름도 확인할 있다.

위의 경우를 보면 좌측에 현재 리슨하고 있는 포트를 있으며 우측에 있는 정보를 보면 해당 포트가 어떤 PID(Process ID)이며 어떤 프로그램인지 확인할 있다. 만약 포트631/tcp 리슨하고 있는 프로세스 정보를 알고자 한다면 pid 2414이고 프로그램 이름이 cupsd 것을 알수 있는데, 상세히 알고자 한다면 앞에서 살펴본 바와 같이 ls -la /proc/<pid> 실행하면 된다.



tcp 경우 "telnet host_ip 포트번호" 확인하면 된다.

telnet 자체는 tcp 프로토콜이므로 tcp 관련 프로토콜에 대해서만 접속 가능하며 udp 포트에 대한 telnet 접속 시도는 의미가 없다. 따라서 이를테면 snmp 작동하는지 확인하기 위해 161/udp telnet 접속하는 것은 의미가 없다는 뜻이다.







아래의 사이트를 참조하면 특정한 포트 번호가 어떤 역할을 하는지에 대해서 상세한 정보를 얻을 있다.









출처: 월간 마이크로소프트웨어 2001년 11월호 (10년전...)

 봐서 이해될만한것만 추스려도 양이 만만치가 않다..

<개발자가 놓지지말아야할 책 베스트10>

Thinking In Java/Bruce Eckel

Practical C Programming/Steve Oualline

Instant CORBA/Robert Orfali,Dan Harkey,Jeri Edwards

Modern Database Management/Fred R.McFadden,Jeffrey A.Hoffer,Mary B.Prescott

Programming Pearls/Jon Bently

Effective C++/Scott Meyers

Unix Network Programming/W.Richard Stevens

MicroC/OS-II The Real-Time Kernel/Jean J.Labrosse

Unix Internals:The New Frontiers/Uresh Vahalia

Extreme Programming Installed/Ron Jeffries,Ann Anderson,Chet Hendrickson


개발자가 놓지지말아야할 책 베스트40

Macintosh Human Interface Guidelines/Apple Computer Staff

Design Patterns/Gang of Four

Refactoring/Martin Fowler

The Pragmatic Programmer:From Journeyman to Master/Andrew Hunt,David Thomas,Ward Cunningham(Preface)

Peopleware:Productive Projects and Teams/Tom DeMarco & Timothy Lister

Linkers and Loaders/John R. Levine

Client Server Database Enterprise Computing/James Martin

DataWareHouse From Architecture To Implementation/Bary Devlin

Operation System Design-The XINU Approach/Douglas Comer

Writing Solid Code/Steve Maguire

Algorithm+Data Structure=Programs/NIclus Wirth

Code Complete/Steve McConnell

Component Software:Beyond Object Oriented Programming/Clemens Szyperski

Software Reuse-Architecture,Process and Organization for Business Success/Ivar Jacobson,Martin Griss,Patrik Jonsson

Extreme Programming Explained/Kent Beck

Applying UML and Patterns,2nd Ed/Craig Larman

The Java Programming Languages, 3rd Ed/David Holmes,James Gosling,Ken Arnold

리눅스 완전분석으로 가는 길/박장수

Operating System Concept/Abraham Silberschatz

TCP/IP Illustrated Volume I,II,III/W.Richard Stevens

Advanced Programming in UNIX Environments/W.Richard Stevens

Understanding COM+/David S.Platt

Compilers: Principles,Techniques and Tools/Jeffrey D.Ullman

Numerical Reciples in C/William H.Press

The C++ Programming Language Special Ed/Bjarne Stroustrup

Effective STL/Scott Meyers

Professional Jini/Sing Li

C++ Primer/Stanley B.Lippman,Josee Lajoie

대용량 데이터베이스 시스템/이화식,조광원

Armchair Universe/A.K.Dewdney

Writing for Computer Science/Justin Zobel

The C Programming Language/Brian W.Kernighan,Dennis M.Ritchie

Bugs in Writing Revisted:A Guide to Debugging Your Prose/Lyn Dupre

The Design of The UNIX Operationg System/Maurice Bach

Building Business Objects/Peter eles,Oliver Sims

The Art of Computer Programming:Fundamental Algorithms/D.Knuth

Professional ATL COM Programming/Ricard Grimes

Pattern-Oriented Software Architecture, Volume 2/Douglas Schmidt

Inside Java2 Virtual Machine/Bill Venners

Understanding ActiveX/COM/David Chappell


개발자가 놓지지말아야할 책 베스트20

Fundamentals of Data Structues in C++/Ellis Horowitz,Dinesh Mehta

Computer Networks/Andrews.Tanenbaum

Modern C++ Design/Andrei Alexandrescu

Database System Concepts/Abraham Silberschatz,Henry F.Korth,S.Sudarshan

Modern Database Management/DaFred R.McFadden,Jeffrey A.Hoffer,Mary B.Prescott

Data Mining:Concepts and Techniques/Jiawei Han,Micheline Kamber

The Design and Implementation of the 4.4BSD Operating System/Marshall Kirk McKusick,Keith Bostic,Michael J.Karels

UNIX Power Tools/Jerry D.Peek,Tim O'Reilly,Mike Loukides

The Unix Programming Environment/Brian W.Kernighan,Rob Pike(Contributor),Robert Pike

The Cathedral & The Bazaar/Eric S.Raymond

The Society of MIND/M.Mmsky

Fundamentals of Object Oriented Design in UML/Meilir Page-Jones

Computer Organization and Design:The Hardware/Software Interface/David A. Patterson, John L. Hennessy

Design Web Usability The Practice of Simplicity/Jakob Nielsen

Introduction to Algorithms/Charles E.Leiserson,Ronald L.Rivest, Thomas H. Cormen

Introduction to the Team Software Process/Watts S.Humphrey,Marc Lovelace

Mythical Man Month/Frederick P.Brooks

The Psychology of Computer Programming/Gerald M.Weinberg

After the Gold Rush/Steve C McConnell

Structure and Interpretation of Computer Programs - 2nd Ed/Harold Abelson,Gerald Jay Sussman,Julie Sussman


출처 : 기술지원 페이지에서 가져온 내용입니다.


1. message queue 개략 설명

Name    Default Max             Brief Description

------  ------- -------------- -------------------------------------

msgmap 100     2147483647      메세지 map 있는 entry 갯수

msgmax 2048    2147483647*     메세지 최대 크기

msgmnb 4096    2147483647*     메세지 큐의 최대 크기

msgmni 50      2147483647      메세지 identifier 갯수

msgssz 8       2147483647*     메세지 segment 크기

msgtql 40      2147483647      시스템 메세지 헤더 갯수

msgseg 1024    32767*          메세지 segment (MUST BE < 32768)


2. message queue 세부 설명


메세지 resource map 크기를 정의한다. map 있는 하나의 entry

연속적인 가용한 공간를 차지한다. 이것은 msgsnd(2) 시스템 콜에 의해

얻어지는 메세지 segment 위한 공간으로 사용된다.  


하나의 메세지에 대한 크기를 제한한다. 메세지의 크기가 값보다 크면

msgsnd(2) 시스템 콜은 EINVAL 오류값을 리턴한다.

값은 최대 2GB까지 사용할 있지만 시스템의 다른 요소들이 65535

제한된 것이 있기 때문에 65535보다 값을 사용할 경우에 예기치 못한

결과가 발생할 있다.


하나의 메세지 큐가 수용할 있는 메세지의 최대 크기를 제한한다.

값은 메세지 큐에 보관되어 있는 메세지들의 크기(byte) 합계이다.

위에 기술된 최대값은 Solaris 2.4 이상의 버전이고, 이전의 버전에서는

최대값이 65535 제한된다.      


시스템에 가용한 메세지 identifier 갯수를 정의한다.

시스템은 값만큼의 msgmni control structure 해당되는 커널 메모리를

미리 할당한다. 하나의 control structure 144 바이트이다.


시스템에서 가용한 메세지 헤더를 갯수를 정의한다. 메세지 큐에 들어

있지만 아직 읽혀지지 않은 메세지는 하나의 메세지 헤더를 차지한다.

시스템은 값만큼의 msgtql control structure 해당되는 커널 메모리를

미리 할당한다. 하나의 control structure 12 바이트이다.

msgssz & msgseg

두개의 값에 의하여, 모든 큐에 있는 모든 메세지에 대한 가용한 전체

바이트 수를 정의한다. 시스템은 메세지 큐들에 대하여 커널 메모리를

미리 할당한다. 메모리의 총합은 msgssz * msgsseg 이다.

msgssz * msgsseg 값은 2147483647 넘어서는 안된다.


3. message queue parameter 설정하기

message queue parameter 시스템에 설정하려면 /etc/system 화일에 다음과

같은 라인을 추가하고, 시스템을 rebooting하면 변경사항이 반영된다.

  set msgsys:msginfo_variable = value

여기서 'variable' 위에서 설명한 Name 필드에 있는 값이다.

예를 들면,

  set msgsys:msginfo_msgmap = 150

msgmap(message queue resource map) 값을 150으로 변경한다.


4. message queue parameter 값을 조사하기

시스템에 설정되어 있는 message queue parameter 값은 'sysdef' 명령어로

확인할 있다.

  $ sysdef

  .... Skip ....


  * IPC Semaphores


     100  entries in msg map (MSGMAP)

    2048  max message size (MSGMAX)

    4096  max bytes on queue (MSGMNB)

      50  message queue identifiers (MSGMNI)

       8  message segment size (MSGSSZ)

      40  system message headers (MSGTQL)

    1024  message segments (MSGSEG)

  .... Skip ....

위에 있는 값들이 0 보일 있다. 경우는 message queue module

커널에 올라와 있지 않기 때문이다. Solaris 2.x에서는 dynamic kernel

사용한다. 이는 kernel module들이 사용될 , kernel 결합되고, 사용하지

않으면 커널에서 제거된다는 것을 의미한다. 강제적으로 message queue

module 커널에 load하려면 다음과 같이 'modload'명령어를 사용할 있다.

  # modload -p sys/msgsys

그리고 다시 sysdef 명령어는 사용하면, message queue parameter 확인할



5. 커널 메모리의 제약

Solaris 2.5 이상 버전에서는 message queue 메모리의 1/4 이상이 할당되지

못하도록 하며, 이상이 할당되면 경고 메세지를 출력하고, message queue

module load하지 않는다.

출처 : http://liverpooh.tistory.com/1


  • 디스크 사용량 확인하기

    #df -mh

    Filesystem            Size  Used Avail Use% Mounted on
                           73G  7.0G   62G  11% /
    /dev/hda1              99M   12M   82M  13% /boot
    none                  251M     0  251M   0% /dev/shm
  • CPU 정보 확인하기

    # more /proc/cpuinfo

    processor       : 0
    vendor_id       : GenuineIntel
    cpu family      : 15
    model           : 2
    model name      : Intel(R) Pentium(R) 4 CPU 3.20GHz
    stepping        : 9
    cpu MHz         : 3208.132
    cache size      : 512 KB
    physical id     : 0
    siblings        : 2
    fdiv_bug        : no
    hlt_bug         : no
    f00f_bug        : no
    coma_bug        : no
    fpu             : yes
    fpu_exception   : yes
    cpuid level     : 2
    wp              : yes
    flags           : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat
    pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe cid xtpr
    bogomips        : 6340.60
  • 디렉토리 크기 확인하기

    # du -sh ./foo
    80M     ./foo

[출처] http://revoman.tistory.com/category/Unix%20%26%20Linux/VI/VIM 


  • 복사, 삭제, 변경등 편집단위를 묶기 위해 블럭지정
  1. v:      글자단위 블럭지정
  2. V:      라인단위 블럭지정
    Ctrl+v: 블럭단위 블럭지정



vimrc & viminfo

  • $HOME/.vimrc

  vi가 수행시 실행하는 초기화 명령이 들어 있는 파일

  여기에 map이나, abbr set 명령등 자신이 vim수행시 필요한 사항들을 기록해둔다.


  • $HOME/.viminfo

  vi가 수행하는 동안 필요한 임시내용들을 저장하는 파일  찾기나, ex 명령, 버퍼등의 정보가 여기에 저장되므로  반복 입력시 처음부터 다 입력할 필요 없이 화살표를 통해

  이전 명령들을 검색할 수 있게 됨.



  • map 은 자기만의 명령을 만들어 냄.
  1.   ex)
  2.   map ; %
  3.   map <F1> :q!<CR>
  4.   map <F3> :set nu!<CR>
  5.   map :%!htran -NF "한글변환해라


  • vmap은 visual모드에서만 사용가능한 맵
  1.   ex)
  2.   vmap <space> zf  "블럭지정한 부분을 fold기능으로 묶어버림


  • imap은 insert모드에서만 사용가능한 맵
  1.   ex)
  2.   imap <C-j> <DOWN>  "Control+j는 입력모드에서 아래화살키로 변경
  3.   imap <C-k> <UP>
  4.   imap <C-h> <LEFT>
  5.   imap <C-l> <RIGHT>
  6.   imap <TAB> <Space><Space><Space><Space>
  8.   map <f1> :set nu!
  9.   map <f2> :wq!
  10.   map <f3> :set ic!
  11.   map <f6> I/* <ESC>A */<ESC>
  12.   map <f7> :s#/\* \(.*\) \*/#\1<CR>:nohlsearch<CR>



  • 입력시 지정해 놓은 글자로 변경됨!
  1.   ex)
  2.   abbr q1 q!
  3.   abbr Q1 q!
  4.   abbr Wq wq
  5.   abbr p# printf("\n");
  6.   abbr inculde include
  7.   abbr THe The
  8.   abbr em@ email:minw.seo@samsung.com
  9.   abbr #b /**************************************************************
  10.   abbr #e **************************************************************/



외부명령의 수행

  • ex mode에서 !로 수행함.
  1.   :%!sort
  2.   :%!uniq
  3.   :r !ls
  4.   :r !pwd
  5.   ※ex mode에서 'r'은 덧붙임 기능.


여러파일의 편집

  1.   vi `grep -l abc *.c`
  3.   :b1<CR>
  4.   :b2<CR>
  5.   .
  6.   .
  7.   .
  8.   :bn<CR>
  9.   :bp<CR>


  • 참고

shell에서 ``는(ESC밑 물결무늬모양 키) ''(Enter옆 따옴표)와는 다른데,이것은 쉘에서 명령입력시 [``으로 감싼 명령을 실행한 결과를 가지고 명령을 수행해라] 라는 의미입니다. 예를 들어 date +%y%m%d를 쉘에서 수행하게 되면오늘 날짜의 연월일을 출력하게 됩니다. 이를 mkdir `date +%y%m%d`를 쉘에서 수행하게 되면 오늘날짜의 디렉토리가 생성되게 됩니다.



  1.   :20vs./
  • 왼쪽에서 수직으로 나뉘며 넓이가 20칸인 창을만들고, 현재 디렉토리의 파일 목록을 보여준다.
  • 열고자 하는 파일을 선택하고 'O'(shift+o)를 입력한다. 그러면 오른쪽의 넓은 창에서 해당 파일이 열린다.



  • 자동완성 기능이란 입력모드에서 문서의 매칭되는 단어들을 자동으로 완성 시켜주는 기능.
  • 사용법

  단어를 입력하다 귀찮을 때 아래와같은 명령 수행

  1.   Ctrl+p(previous)
  2.   Ctrl+n(next)



  • 소스코드등의 중요하지 않은 부분들을 묶어서 간단하게 표시하고자 할 때 사용함.
  • 사용법
  1.   zo : 닫혀있는 폴드 열기
  2.   zc : 폴드 닫기
  3.   zf : 폴드 생성하기
  4.   zd : 현재 위치의 폴드 삭제하기
  5.   zR : 현재 문서의 모든 폴드 열기
  6.   ZM : 현재 문서의 모든 폴드 닫기
  7.   zE : 현재 문서의 모든 폴드 삭제
  8.   zD : 현재 위치의 겹쳐진 폴드 삭제
  9.   set fdm=marker
  10. ;폴드를 마커에 의존해서 동작하게 한다. 기본적으로는 ,의 짝으로 이루어지게 되어 있음.
  11.   set fdm=marker를 .vimrc파일에 넣어두고 사용하게 되면, 파일을 열 때마다 설정할 필요가 없음.
  12. 또는 /* vim: set fdm=marker: */ 이런 식으로 문서의 맨 처음이나 맨 끝에 두게 되면, 자동으로 설정되어, set fdm=marker라고 설정해 두지 않아도 vim 구동시 자동으로 동작하게 됨.




  • 화면을 가로 또는 세로로 쪼개서 여러 파일을 동시에 편집할 때 또는 다른 파일을 참조하면서 코딩시에 유용하게 사용할 수 있는 기능.
  1.   :sp 가로로 쪼개기
  2.   :vsp 세로로 쪼개기
  3.   ctrl+w s 가로로 쪼개기 다른 방법
  4.   ctrl+w v 세로로 쪼개기 다른 방법
  5.   ctrl+ww  쪼개진 창 간 이동
  6.   ctrl+w=  쪼개지 창 사이즈 동일하게
  • 쪼개진 창사이즈 조절(세로)
  1.   ctrl+w [0]+
  2.   ctrl+w [0]-
  • 쪼개진 창사이즈 조절(가로)
  1.   ctrl+w [0]>
  2.   ctrl+w [0]<



  • vim의 split기능을 이용하여 두 파일간 차이를 한눈에 쉽게 비교할 수 있다.
  1.   vi -d file1 file2


  1. set dip=iwhite,icase
  2. ; vim으로 diff시 unix diff의 -i -b 옵션 같은 기능, 공백무시, 대소문자 무시 비교 시 사용


register(= named buffer)


  • 윈도우의 클립보드와 같은 기능으로, vim에서 사용가능한 버퍼는 알파벳[a-z]까지 26개 및 다양한 특수 문자 및 숫자에 특수한 기능으로 설정되어 있다.
  1. ctrl+R + W%"
  2. ctrl+r,w : 현재 커서 밑 단어
  3. ctrl+r,% : 현재 파일 명
  4. ctrl+r," : 현재 버퍼 내용


  1. :register or :reg
  2.   현재의 register내용을 보여 줌.
  3.   ""   ^[
  4.   "0~9
  5.   "a
  6.   "s
  7.   "w
  8.   "-   ^[
  9.   ".
  10.   ":   register
  11.   "%   DBBG_rep.ch
  12.   "/   prep_map




  • vim과 ctags는 유닉스 환경에서 프로그래밍 시 없어서는 안될 필수의 기능이다. ctags는 소스파일을 읽어서 각종 변수 및 구조체 함수의 위치를 태그로 만들어 tags라는 파일로 생성해서 이를 vim에서 함수 및 변수명을 통한 파일간 이동을 쉽게 해주는 툴이다.
  •  tags파일 생성법
  1.   ctags -R
  2.   ctrl+] -> tag로 이동
  3.   ctrl+t ->
  4.   vi -t tagname




  • 특정한 패턴을 기술하기 위한 Meta 언어를 이용하는 패턴 묘사.
  1.   ^ 행의 시작에서 정규 표현식의 첫번째 문자가 매치(대괄호 안에서는 부정의 의미)
  2.   . 개행문자를 제외한 임의의 문자 한 개와 매치
  3.   [] 대괄호 안에 있는 임의의 문자와 매치하는 문자 클래스
  4.   * 바로앞에 있는 패턴이 0번 혹은 그 아상 반복되는 것
  5.   $ 행의 끝에서 정규표현식의 마지막 문자가 매치
  6.   \+ 앞에 있는 정규 표현식이 한 번이나 그 이상 반복하여 매치할 수 있음을 의미.
  7.   A\{1,3\}
  8.   ;문자 A가 한번에서 연속 세번까지 나타난 문자열 매치
  9.   \| 앞에 있는 정규 표현식 혹은 뒤에 있는 정규 표현식에 매치
  10.   \< 단어의 시작
  11.   \> 단어의 끝
  12.   \( \) 정규표현식 여러 개를 새로운 정규표현식 한 개로 묶는다.
  13.   \s 공백(탭, 스페이스)
  14.   \d 숫자



  • 커서밑 단어 쉽게 찾기
  1.   # == ?\<ctrl+r ctrl+w\>
  2.   ;커서밑 단어와 같은 단어 위로 탐색
  3.   * == /\<ctrl+r ctrl+w\>
  4.   ;커서밑 단어와 같은 단어 아래로 탐색


파일간 복사

  • * register를 이용하는 방법.
  • * split기능을 이용한 방법.
  • * :r 명령을 이용한 방법.


undo & redo

* vim에서는 무한 undo & redo가 가능하다.

  1.   undo : u
  2.   redo : ctrl+r


숫자의 증감 ctrl+a ctrl+x

  • 숫자를 자동으로 증감 시키는 기능
  1.   add
  2.   extract
  • 사용법
  1.   ctrl+a  숫자 1증가
  2.   ctrl+x  숫자 1감소


ctrl+o <TAB>

  • ctrl+o : 찾기 등의 명령으로(마커이동) 이동한 곳으로 이동
  •  <TAB>  :  되돌아가기


set syn=c

  • 확장자가 다른 파일 강제 syntax할당
  • 확장자가 틀려서 syntax 칼라매핑이 안될 때.



  • echo $VIMRUNTIME
  • help file, syntax file, plugin file등이 있음.
  • .profile에 export VIMRUNTIME=...로 추가


대문자 소문자 변경

  • 대문자를 소문자로 변경할때
  1.   %s/.*/\L&/g
  • 소문자를 대문자로 변경할때
  1.   %s/.*/\U&/g
  • ~키를 누르면 커서에 위치한 문자가 대/소문자로 변경된다.
  • 영역선택후 u 를 누르면 전체 문자열이 소문자로 변경된다.
  • 영역선택후 U 를 누르면 전체 문자열이 대문자로 변경된다.
  • : help ~
  • gUU : 커서에 위치한 줄 전체가 대문자로 변경
  • guu : 커서에 위치한 줄 전체가 소문자로 변경


함수선언과 지역변수 선언 부분으로 이동

  • 함수나 변수가 사용된 부분에 커서를 위치 시킨후 명령모드에서 '[i'를 입력하면 하단에 해당 함수나 변수의 원형이 나타난다
  • 지역변수가 선언된 부분으로 이동하고 싶다면 'gD', 'gd'를 입력한다.


^M 문자 제거

  • :%s/^M//g
  • set fileformat=dos
  • ^M문자는 ctrl+v+Enter 키를 입력하면 된다.



  • foo라는 문자열을 bar로 바꾼다.
  1.   :%s/foo/bar


  • c 옵션
  1.   :%s/foo/bar/c
  2.   바꿀 때마다 바꾸어도 좋은지 물어보기에 더 안전하다. y를 누르면 바꾸고, n을 누르면 다음으로 건너뛰고, a를 누르면 모두 바꾼다.


  • 정확한 문자열 치환
  1.   :%s/\<foo\>/bar
  2.   이렇게 하면 정확하게 foo에 일치될 때만 바꾼다. 즉 foo는 바꾸지만, foo 앞뒤로 다른 문자열이 붙어 있는 경우,
  3.   예를 들어
  4.   fooZZZ
  5.   ZZZfoo
  6.   ZZZfooZZZ
  7.   이런 문자열 속의 foo 는 바꾸지 않는다.


  • 대소문자 구분없이 치환
  1.   :%s/foo/bar/i
  2.   이렇게 i 옵션을 붙인다.


  •  전역 치환
  1.   :%s/foo/bar/g


  • '%' 는 전체문서(처음부터 끝까지),  '.'  은 현재, '$' 은 마지막을 나타낸다. 숫자를 입력할 경우 숫자는 라인을 나타낸다. 다음은 간단한 사용 예이다.
  1. 문서 처음부터 마지막까지의 char 를 _char_ 로 치환한다.

    # 현재(커서위치)부터 마지막까지의 char 를 _char_ 로 치환한다.

    # buf_.*[255], buf_in[255], buf_get[255] 와 같은 문자열을 hello 로 변경한다. 


인코딩을 변환하여 불러오기.

:e ++enc=euc-kr


그리고 아래 명령으로 인코딩을 변환한 다음 저장한다.

:set fileencoding=utf-8


라인 정렬

처음부터 끝 라인까지 모조리 정렬하기.


붙여넣기 시에 복사했던 라인 그대로 가져오려면

set paste ( 이를 실행하고 나면 자동 indent 기능이 off 됨)



solaris9 vim 설치시 주의사항

Unix & Linux/VI/VIM / 2009/06/09 14:46

solaris9에서 LOCALE을 다음과 같이 설정하고, VIM에서 한글을 입력하고자 하면 문제가 발생할 수 있다.

  2. LANG=ko_KR.UTF-8


이 경우에는 vim 설치시 다음 옵션을 추가하여 configure를 수행하도록 한다.


./configure --with-x --enable-multibyte --enable-fontset --enable-hangulinput


기타 한글 관련 메뉴얼은 설치 디렉토리내의 vim72/runtime/doc/hangulin.txt를 참고하면 된다.



<http://revoman.tistory.com/category/Unix%20%26%20Linux/VI/VIM>에서 삽입

출처... 모르겠음..


과거 5~70년대 전산학의 초기 단계때, 최단 거리 알고리즘의 고안과 같은 지대한 공헌을 한 덴마크의 물리학자 에츠허르 데이크스트라(Edsger Dijkstra) 교수가 남겼던 격언입니다.

Programming is one of the most difficult branches of applied mathematics; the poorer mathematicians had better remain pure mathematicians.
프로그래밍은 응용 수학에서 가장 어려운 분야다. 어설픈 수학자는 그냥 순수 수학자가 되는게 낫다.

The easiest machine applications are the technical/scientific computations.
가장 간단한 컴퓨터 응용분야는 기술적/과학 연산 분야이다.

The tools we use have a profound (and devious!) influence on our thinking habits, and, therefore, on our thinking abilities.
우리가 사용하는 도구는 우리의 사고 습관에 영향을 끼치며, 따라서 우리의 사고 능력에 영향을 준다.

FORTRAN --"the infantile disorder"--, by now nearly 20 years old, is hopelessly inadequate for whatever computer application you have in mind today: it is now too clumsy, too risky, and too expensive to use.
포트란 -- “발달 장애”-- 20년이나 지났기에 오늘날의 컴퓨터 어플리케이션에는 전혀 적합치 않다. 너무 거추장스럽고, 너무 위험 부담이 크고, 너무 비싸다.

PL/I --"the fatal disease"-- belongs more to the problem set than to the solution set
PL/I -- “치명적 질병” -- 이건 솔루션이라기 보다는 문제다.

It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.
베이직을 먼저 익혔던 학생들에게 좋은 프로그래밍 기술을 가르친다는 것은 사실상 불가능하다. 왜냐하면 절대로 회복 불가능한 정신적 데미지를 입히기 때문이다.

The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offence.
코볼을 쓰는 것은 멘탈을 붕괴시키는 짓이다. 따라서 이딴걸 가르치는 행위는 범죄 행위로 여겨야 할 것이다.

APL is a mistake, carried through to perfection. It is the language of the future for the programming techniques of the past: it creates a new generation of coding bums.
APL은 완벽함의 경지에 다다른 실책이다. 이건 구시대식 테크닉으로 만든 미래의 프로그래밍 언어이다. 신세대 프로그래밍 골칫거리나 만든다.

The problems of business administration in general and data base management in particular are much too difficult for people that think in IBMerese, compounded with sloppy English.
일반적인 데이터 베이스 매니지먼트의 관리자들이 갖는 문제점은 그들은 생각은 IBM語로 하면서 어설픈 영어로 말한다는 것이다.

About the use of language: it is impossible to sharpen a pencil with a blunt axe. It is equally vain to try to do it with ten blunt axes instead.
언어의 활용에 대해서 말하자면, 연필을 무딘 도끼로 깎는 것은 불가능하다. 무딘 도끼를 10개 가져와 봐야 마찬가지로 쓸모없다.

Besides a mathematical inclination, an exceptionally good mastery of one's native tongue is the most vital asset of a competent programmer.
우수한 프로그래머의 가장 중요한 자산은 수학적 능력 외에도 자신의 모국어에 대해 매우 뛰어나야 한다는 것이다.

Many companies that have made themselves dependent on IBM-equipment (and in doing so have sold their soul to the devil) will collapse under the sheer weight of the unmastered complexity of their data processing systems.
IBM 기기들에게 의존하고 있는 많은 업체들은 (그러기 위해서 놈들은 자신의 영혼을 팔았다) 자신들의 데이터 처리 시스템의 미칠듯한 복잡함의 무게를 견디지 못하고 쓰러지게 된다.


Simplicity is prerequisite for reliability.
신뢰성의 전제 조건은 간결함이다.

We can found no scientific discipline, nor a hearty profession on the technical mistakes of the Department of Defense and, mainly, one computer manufacturer.
특정 컴퓨터 제조업체와 국방부에서 저질러지는 기술적 오류에서는 그 어떠한 과학적인 사고 방식이나 장인정신이라곤 찾아볼 수 없다.

The use of anthropomorphic terminology when dealing with computing systems is a symptom of professional immaturity.
컴퓨터를 다루는데 의인화한 단어들을 쓰는 것은 기술적인 미숙함의 증상이다.

By claiming that they can contribute to software engineering, the soft scientists make themselves even more ridiculous. (Not less dangerous, alas!) In spite of its name, software engineering requires (cruelly) hard science for its support.
돌팔이 과학자(soft scientist)들은 자신들이 소프트웨어 공학에 기여할 수 있다고 주장함으로 자신들을 더욱 멍청하게 만든다. 명칭에 소프트라는 말이 들어가 있으나, 소프트웨어 공학에는 진짜 과학(hard science)이 필요하다.

In the good old days physicists repeated each other's experiments, just to be sure. Today they stick to FORTRAN, so that they can share each other's programs, bugs included.
옛날옛적엔 물리학자들은 검증을 위해 서로의 실험을 반복하곤 했다. 오늘날 물리학자들은 포트란이나 돌려대면서 서로의 버그를 포함한 프로그램을 공유한다.

Projects promoting programming in "natural language" are intrinsically doomed to fail.
자연어를 통한 프로그래밍을 홍보하는 프로젝트는 망하게 되어 있다.


+ Recent posts