vi편집기에는 명령어 모드(command mode)와 편집모드(edit mode)가 있다.
다음에 설명하는 모든 명령어는 vi편집기의 편집명령어이며, 이 명령을 주고(명령어모드상태) 난 다음에 파일을 편집(편집모드)할 수가 있습니다.
명령어 모드에서는 글쇠그 자체의 의미가 아니라 명령의 의미를 지니며, 편집모드에서는 키보드 글쇠 그자체의 의미를 지닙니다.
편집모드에서 명령어모드로 이동할 때는 Esc키를 눌러서 빠져 나옵니다.
|
|
커서의 이동
커서를 이동시킬 때는 아래의 글쇠를 이용하며, 가급적이면 화살표키는 사용하지 않는 것이 좋습니다.
|
h |
왼쪽으로 이동 |
|
j |
아래로 이동 |
|
k |
위로 이동 |
|
l |
오른쪽으로 이동 |
|
w |
한단어 오른쪽으로이동 |
|
b |
한단어 왼쪽으로 이동 |
|
Return |
한행아래로 이동 |
|
Backspace |
한문자 왼쪽으로 이동 |
|
Spacebar |
한문자 오른쪽으로 이동 |
|
H |
화면의 맨위로 이동 |
|
M |
화면의 중간으로 이동 |
|
L |
화면의 맨 아래로 이동 |
|
^F |
한화면 앞으로 이동 |
|
^D |
반화면 앞으로 이동 |
|
^B |
한화면 뒤로 이동 |
|
^U |
반화면 뒤로 이동 |
|
|
삽입명령어
|
a |
커서 오른쪽에 문자삽입 |
|
A |
커서 오른쪽, 행의끝에 문자삽입 |
|
i |
커서 왼쪽에 문자삽입 |
|
I |
커서왼쪽, 행의 처음에 문자삽입 |
|
o |
커서 아래에 행 삽입 |
|
O |
커서 위에 행 삽입 |
|
<Esc> |
작업완료후 반드시 입력 |
텍스트 변경
|
cw |
단어 변경 |
|
cc |
행 변경 |
|
C |
커서 오른쪽의 행 변경 |
|
s |
커서가 위치한 문자열 대체 |
|
r |
커서 위치 문자를 다른 문자로 대체 |
|
r-Return |
행 분리 |
|
J |
현재 행과 아래 행 결합 |
|
xp |
커서 위치 문자와 오른쪽 문자교환 |
|
- |
문자형(대,소문자) 변경 |
|
u |
이진 명령 취소 |
|
U |
행 변경 사항 취소 |
|
:u |
이전의 최종행 취소 |
텍스트 삭제
|
x |
문자삭제 |
|
dw |
단어삭제 |
|
dd |
행 삭제 |
|
D |
커서 오른쪽 행 삭제 |
|
:5,10 d |
5-10째 행 삭제 |
행번호 설정
|
:set nu |
행번호 표시 |
|
:set nonu |
행번호 숨기기 |
행 찾기
|
G |
파일의 마지막 행으로 가기 |
|
12G |
파일의 12번째 행으로 가기 |
텍스트의 복사 및 이동
|
yy |
행 yank 또는 복사 |
|
Y |
행 yank 또는 복사 |
|
P |
yank 되거나 삭제된 행을 현재 행 아래에 삽입 |
|
p |
yank되거나 삭제된 행을 현재 행 위에 삽입 |
|
:1,2 co 3 |
1-2행을 3행 다음으로 복사 |
|
:4,5 m 6 |
4-5행을 6행 다음으로 이동 |
|
|
탐색 및 대체
|
/string/ |
string탐색 |
|
?string? |
string 역 방향 탐색 |
|
n(N) |
string의 다음(이전) 계속 탐색 |
|
:g/search-string/s//replace-string/gc |
각 발생 탐색후 확인하고 대체 |
|
:s/str/rep/ |
현재 행의 str을 rep로 대체 |
|
:1,.s/str/rep/ |
1부터 현재 행의 str을 rep로 전부 대체 |
|
:%s/str/rep/g |
파일 전체 str을 rep로 전부 대체 |
^L 불필요한 화면 내용 제거 후 다시 표시
다른 파일을 파일내로 삽입
|
:r filename |
커서 다음에 파일 삽입 |
|
:20 r filename |
파일을 20번째 행 다음에 삽입 |
파일의 저장 및 종료
|
:w |
변경사항 저장 |
|
:w filename |
지정한 파일로 저장 |
|
:wq |
변경사항 저장후 vi종료 |
|
ZZ |
변경사항 저장후 vi종료 |
|
:q! |
변경사항을 저장하지 않고 vi종료 |
참고로 UNIX 와 DOS의 명령어를 비교해 보도록 하자
|
UNIX |
MS-DOS |
기 능 |
|
clear |
CLS |
화면의 내용을 깨끗이 지운다. |
|
ls |
DIR |
현재 디렉토리의 파일목록을 표시한다. |
|
cp |
COPY |
파일을 복사한다. |
|
mv |
REN |
파일의 이름을 변경한다. |
|
mv |
MOVE |
파일을 다른곳으로 옮긴다. |
|
rm |
DEL |
파일을 삭제한다. |
|
cat |
TYPE |
파일내용을 표시한다. |
|
pwd |
CD |
현재 위치의 경로를 표시한다. |
|
cd |
CD |
디렉토리의 경로를 이동한다. |
|
mkdir |
MD |
새로운 디렉토리를 만든다. |
|
rmdir |
RD |
디렉토리를 삭제한다. |
출처:http://mars0717.egloos.com/1297942
Eclipse 팁 #1 (코드 Style 설정)
팀 프로젝트를 진행할때 개발자별로 Coding Style이 달라서 고생하는 경우가 많습니다.
이를 위해 Eclipse는 코드 형식화를 지원하는데요,
아래와 같이 코딩 규칙을 위해바는 코드가 있다고 가정합시다.
해당 코드 위에서 [ Ctrl+Shift+F ] 키만 누르면 아래와 같이 코드가 이쁘게 정리됩니다.
이는 Eclipse에서 설정된 Code Formatter의 설정에 따른 것입니다.
프로젝트에서 개발된 모든 코드에 같은 코딩 규칙을 적용하고 싶다면..
결정된 Coding Convention에 따라 Code Formatter의 설정을 바꾼 다음,
그것을 XML 파일로 Export하고, 개발자에게 Import 시켜 적용하도록 하면 된답니다.
아래 그림은 Windows - Preferences 에서 "Java - Code Style - Code Formatter"를
선택했을 때 나오는 그림입니다.
Eclipse 3.0은 기본적으로 2가지 코드 형식을 기본적으로 내장하고 있습니다.
Java Conventions를 선택하고, Show.. 버튼을 누르면 해당 설정을 커스터마이징 할 수 있습니다.
탭 사이즈와 괄호의 위치 등 모든 것을 변경할 수 있습니다.
Eclipse 팁 #2 (Import문 정리)
개발할 때 어떤 기능을 구현하기 위해 특정 라이브러리를 import 시켜놓고,
그 기능이 필요없어져서 삭제한 다음에도 import문은 그대로 두는 경우가 많습니다.
그때 Eclipse가 제공하는 Organize import 기능은 아주 유용한데요..
아래와 같이 사용되지 않는 라이브러리를 import한 경우 Eclipse는 앞에 전구를 키고 표시해줍니다.
이때 [ Ctrl+Shift+O ] 버튼을 누르면 사용하지 않는 모든 import 문이 정리됩니다. 아래와 같이 깨끗하게 말이죠.
또 한가지 유용한 기능은 같은 패키지 내에서 여러 개의 클래스를 import할 경우입니다.
예를 들어 한 패키지 내에서 4개 이상의 클래스를 import 한다면,
그것을 *로 합쳐서 표시하도록 하고 싶을 때가 있습니다.
그럴 때는 window - preference 로 가서 java - code style - organize import에서
Number of imports needs for .*의 수를 4로 해놓으면,
같은 패키지에서 4개이상의 클래스가 임포트되면 *로 합쳐서 표시해줍니다.
(Apply 버튼 바로 위에 그 항목이 있습니다.)
Eclipse 팁 #3 (영역별 주석처리)
여러 줄에 걸쳐 있는 코드를 주석 처리하고 싶은데,
주석 처리하고자 하는 영역 내에 /* */가 있을 경우 참 곤란하시죠?
일일이 // 를 앞에 붙이려니 얼마나 손가락이 빠른지를 테스트하는거 같구.. ^^*
그럴 때 주석처리할 영역을 선택 한 다음 [ Ctrl+/ ] 를 눌러보세요.
아래와 같이 자동으로 해당 영역을 주석으로 만들어줍니다.
주석을 해제하고 싶다면 다시 한번 더 [ Ctrl+/ ]를 눌러주면 됩니다.
Eclipse 팁 #4 (에디터칸이동)
실제 프로젝트를 작업하다 보면 한번에 열어놓은 파일이 30개가 넘는 것은 기본이죠?
그때 해당 파일들 사이를 열려진 윈도우를 [ Alt+Tab ] 을 이용해서
이동하는 것 같은 기능이 있다면 편할겁니다.
그러한 단축키가 [ Ctrl+F6 ] 입니다.
그 키를 누르면 화면 중앙에 아래와 같은 에디터 이동 화면이 뜹니다
바로 이전으로 이동할 때는 [ Ctrl+F6 ]이 편하지만,
여러 개 중 하나를 이동할 때는 [ Ctrl+F6 ]을 누른 후,
[Ctrl+화살표] 를 이용해서 원하는 에디터로 이동하는 것이 편합니다.
Eclipse 팁 #6 (줄번호 표시 및 줄 이동하기)
Eclipse의 기본 설정에 라인 번호는 표시되지 않도록 되어 있습니다.
디버깅할 때 특정 라인에 에러가 있음을 확인했는데, 일일이 줄을 세어가면서 이동할 수도 없구..
그때 해당 라인으로 이동하기 위한 단축키가 [ Ctrl+L ] 입니다.
윈도우와 같이 Ctrl+G 로 단축키를 변경해서 쓰시는 것도 좋을 듯 합니다.
아예 줄번호가 항상 표시되도록 하고 싶다면 window - preference 에서,
Java - Editor로 이동한 다음 "Show line numbers"를 체크해두시면 됩니다.
Eclipse 팁 #7 (변경사항 추적하기)
변경 사항을 추적하고자 하는 파일을 PackageExplorer에서 선택 후,
오른쪽 버튼을 눌러 컨텍스트 메뉴에서 [ compare with Local History ] 선택합니다.
시간대 별로 이전의 작업 결과를 보실 수 있습니다.
만일 이전의 코드로 되돌아가고 싶다면, 같은 방법으로 파일의 컨텍스트 메뉴에서
[ Replace with ] 를 선택하고, [ Local History ]에서 변경하면 됩니다.
Eclipse 팁 #8 (Javadoc 문서생성 )
JavaDoc 형태의 주석으로 소스코드 문서화가 된 상태라고 가정하겠습니다.
Project 메뉴의 [ Generate Javadoc... ] 기능을 실행하면
간편한 마법사의 지원을 통해 Javadoc 문서를 생성할 수 있습니다.
일반적으로 프로젝트 루트 밑에 doc 이란 폴더 안에 JavaDoc으로 생성된 API 문서를 포함합니다.
생성될 API 문서에 포함시킬 정보를 선택하는 것이 마법사의 다음 단계입니다.
Finish 버튼을 누르면 Package Explorer에 아래와 같이 API 문서가 생성된 것을 확인할 수 있습니다.
Eclipse 팁 #9 (전체프로젝트 ZIP 백업)
전체 프로젝트를 백업하기 위해 압축을 해야 할때 유용한 기능입니다.
File 메뉴의 Export 기능을 실행하면 아래와 같은 윈도우가 뜹니다.
선택요소 중에서 ZIP 파일을 선택합니다.
다음 화면은 백업할 요소들을 선택하는 것입니다.
일반적으로 자동 생성되는 JavaDoc 문서나 Classes 파일들은 백업하지 않습니다.
적당한 백업 파일 이름과 위치를 결정하고 Finish 버튼을 누르면 백업이 완료됩니다.
이클립스에서 유용한 단축키
Ctrl + e : 한줄지움
Ctrl + w : 메뉴보여줌
Ctrl + space : 클래스등 코드 도움
Ctrl + / : 한줄 주석 반대는 Ctrl + \
Ctrl + , : 찾기나, TASK항목 이동
Ctrl + . : 이동
Ctrl + F6 : Editor 선택
Ctrl + F7 : View 선택
Ctrl + F8 : Perspectieve 선택
Ctrl + F11 : 디버깅
Ctrl + 1 : QuickFix 실행
Ctrl + Shift + b : 브레이크 포인트
Ctrl + Shift + e : 현재 캐럿에서 끝까지 삭제
Ctrl + Shift + f : 코드 포맷팅
Ctrl + Shift + m : 자동 임포트
Ctrl + Shift + o : 임포트 자동 정리
Ctrl + Shift + space : 입력 파라미터 정보 보여줌
1. Excel에 데이터를 다운로드 할 List를 JSP에 넘김.
//mnv 는 ModelAndView 객체다.
mnv.addObject("returnList", returnList);
2. JSP에서 해당 List 를 request 객체에서 받음.
request.getAttribute("returnList"); 쯤 되겠다.
3. JSP에 아래 내용을 추가.
<%@ page language="java" contentType="application/vns.ms-excel; charset=euc-kr" pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page import="java.util.List"%>
<%
response.reset();
response.setHeader("Content-Disposition", "attachment;filename="+new Date().getTime()+".xls;");
response.setHeader("Content-Description", "JSP Generated Data");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
%>
<html>
<head>
<meta http-equiv="Content-type" content="application/x-msexcel;charset=euc-kr">
</head>
<body>
<h3>회선가입자 리스트</h3>
<table>
<colgroup> <!-- colgroup 에서 미리 각 Cell의 가로 길이를 지정한다. -->
<col width="50" /><col width="80" /><col width="200" /><col width="100" /><col width="100" /><col width="100" /><col width="100" /><col width="150" /><col width="100" /><col width="200" /><col width="50" />
</colgroup>
<thead>
<tr>
<!-- EtcUtils.mKscToAsc() 메소드는 한글 인코딩 문제를 해결하기 위해 인코딩해주는 메소드다.
인코딩을 안할 경우 당연히.. 한글은 깨진다. -->
<th><%=EtcUtils.mKscToAsc("번호")%></th>
<th><%=EtcUtils.mKscToAsc("통신사")%></th>
<th><%=EtcUtils.mKscToAsc("Client")%></th>
<th><%=EtcUtils.mKscToAsc("부서")%></th>
<th><%=EtcUtils.mKscToAsc("등록일")%></th>
<th><%=EtcUtils.mKscToAsc("가입일")%></th>
<th><%=EtcUtils.mKscToAsc("해지일")%></th>
<th><%=EtcUtils.mKscToAsc("신청자")%></th>
<th><%=EtcUtils.mKscToAsc("회선")%></th>
<th><%=EtcUtils.mKscToAsc("상품명")%></th>
<th><%=EtcUtils.mKscToAsc("상태")%></th>
</tr>
</thead>
<tbody>
<%
for(int i = 0; i < returnList.size(); i++){
String status = "";
if(returnList.get(i).getServUseFlag().equals("0")){
status = "신청";
}else if(returnList.get(i).getServUseFlag().equals("1")){
status = "가입";
}else if(returnList.get(i).getServUseFlag().equals("2")){
status = "해지";
}else if(returnList.get(i).getServUseFlag().equals("3")){
status = "재가입";
}
%>
<tr>
<td align='center'><%=(returnList.size() - i )%></td>
<td align='center'><%=EtcUtils.mKscToAsc(returnList.get(i).getTelecom())%></td>
<td align='center'><%=EtcUtils.mKscToAsc(returnList.get(i).getCust().getCoNameKr())%></td>
<td align='center'><%=EtcUtils.mKscToAsc(returnList.get(i).getPart().getPartName())%></td>
<td align='center'><%=sdf.format(returnList.get(i).getRegDate())%></td>
<%if(returnList.get(i).getJoinDate() == null){%>
<td align='center'> </td>
<%}else{%>
<td align='center'><%=sdf.format(returnList.get(i).getJoinDate())%></td>
<%}%>
<%if(returnList.get(i).getDelDate() == null){%>
<td align='center'> </td>
<%}else{%>
<td align='center'><%=sdf.format(returnList.get(i).getDelDate())%></td>
<%}%>
<td align='center'><%=EtcUtils.mKscToAsc(returnList.get(i).getUserName())%></td>
<td align='center' style='mso-number-format:\\@;'><%=returnList.get(i).getHpno()%></td>
<td align='center'><%=EtcUtils.mKscToAsc(returnList.get(i).getCode().getServiceName())%></td>
<td align='center'><%=EtcUtils.mKscToAsc(status)%></td>
</tr>
<%}%>
</tbody>
</table>
</BODY>
</HTML>

Prev
Rss Feed