문서 편집기

**문서 편집기**(文書編輯機) 또는 **텍스트 에디터**()는 단순한 문서 파일을 편집하기 위해 쓰이는 소프트웨어이다. 이진 형식이 아닌 사람이 읽을 수 있는 텍스트 형식의 파일을 읽고 간단한 조작으로 편집하여 저장할 수 있는 컴퓨터의 가장 기본적인 소프트웨어 중의 하나이다.

## 일반 텍스트 파일 vs. 워드 프로세서 파일
텍스트 에디터로 생성된 일반 텍스트 파일과 마이크로소프트 워드, 워드퍼펙트, 또는 OpenOffice.org와 같은 워드 프로세서로 생성된 문서 파일에는 기본적으로 중요한 차이가 있다.

일반 텍스트 파일은 파일에서 표현된 그대로를 보여줌으로써 편집하고 나타낼 수 있다. '표시'할 수 없는 유일한 문자는 사용된 문자 집합의 제어문자이다; 실질적으로 줄바꿈, 탭 그리고 폼 피드(formfeed)를 예로 들 수 있다. 특히 요즘에 가장 일반적으로 사용되는 문자 집합은 ASCII로 일반 텍스트 파일은 과거에 문서 작성을 할 때(예를 들면 구체적인 사용 설명, 혹은 사용 안내)보다, 프로그래밍과 구성을 하는데 더 자주 사용된다.

문서는 일반적으로 문자 집합을 정의하는 것 이외에도 구체적인 파일 포맷 "제어 문자"를 포함하고 있다. 이것은 굵게, 기울임꼴, 글꼴, 열, 표 등의 기능을 활성할 수 있다. 또한 다른 일반 페이지 포맷 기호들이 일단 바탕화면에 연결되어 있었으나 현재는 가장 간단한 워드 프로세서의 기본 화면에서 볼 수 있다.

워드 프로세서 프로그램은 일반 텍스트 파일을 편집하며 기본 텍스트 파일 형식으로 저장한다. 하지만 프로그램 작성 시 무엇을 요구하고 있는지에 대해 주의를 기울여 작성해야 한다. 저장 형식을 지정할 때에, 특히 소스 코드, HTML, 그리고 구성, 제어 파일과 같이 특히 더 중요한 파일에는 더욱 더 주의를 기울여야 한다. 만일 프로그램을 초기값으로 그대로 둘 경우 파일은 "특수 문자"를 포함하게 될 것이며 파일이 의도하고자 했던 유틸리티 정확히 표현할 수 없을 수도 있다.

## 역사
[섬네일|몇 개의 프로그램 덱이 담긴 [천공 카드 상자]]
문서 편집기가 존재하기 전에는 컴퓨터 텍스트가 키펀치 기계로 카드에 천공되었다. 이 얇은 마분지 카드 상자들은 카드 리더기에 삽입되었다. 이러한 카드 덱에서 생성된 자기 테이프, 드럼, 디스크 card image 파일들은 종종 줄 구분 문자가 전혀 없었으며, 고정 길이 80자 또는 90자 레코드를 가정했다. 카드 대신 천공 테이프도 사용되었다. 이는 일부 전신타자기 (예: Teletype)에서 생성될 수 있었는데, 특수 문자를 사용하여 레코드의 끝을 표시했다. 일부 초기 운영체제에는 언어 프로세서와 통합되거나 별도의 유틸리티 프로그램으로 제공되는 배치 텍스트 편집기가 포함되었다. 초기 예시 중 하나는 SHARE 운영체제에서 SCAT의 SQUOZE 소스 파일을 편집하는 기능이었다.

최초의 대화형 문서 편집기는 디스플레이가 없는 전신타자기 또는 타자기 방식 단말기에 맞춰진 "라인 편집기"였다. 명령어(종종 단일 키 입력)는 "커서"라고 불리는 가상의 삽입 지점에서 파일에 대한 편집을 수행했다. 편집은 파일의 작은 부분을 인쇄하는 명령어를 입력하거나 주기적으로 전체 파일을 인쇄하여 확인되었다. 일부 라인 편집기에서는 파일의 줄 번호, 검색할 텍스트 문자열, 그리고 나중에는 정규 표현식을 지정하는 명령어를 통해 커서를 이동할 수 있었다. 라인 편집기는 키펀칭에 비해 크게 개선된 것이었다. 일부 라인 편집기는 키펀칭으로도 사용할 수 있었다. 편집 명령어는 카드 덱에서 가져와 지정된 파일에 적용될 수 있었다. 일부 일반적인 라인 편집기는 변경 명령이 변경된 줄을 표시하는 "확인" 모드를 지원했다.

비디오 화면이 있는 컴퓨터 단말기가 사용 가능해지자 화면 기반 문서 편집기(때때로 단순히 "화면 편집기"라고도 불림)가 보편화되었다. 가장 초기 전체 화면 편집기 중 하나는 1967년 CDC 6000 시리즈 컴퓨터의 운영자 콘솔을 위해 작성된 O26이었다. 또 다른 초기 전체 화면 편집기는 vi였다. 1970년대에 작성된 이 편집기는 유닉스 및 리눅스 운영체제에서 여전히 표준 편집기이다. 또한 1970년대에 작성된 UCSD 파스칼 화면 지향 편집기는 들여쓰기된 소스 코드와 일반 텍스트 모두에 최적화되었다. 최초의 자유 및 오픈 소스 소프트웨어 프로젝트 중 하나인 이맥스는 다른 초기 전체 화면 또는 실시간 편집기이며, 많은 시스템으로 포팅되었다. 1977년 코모도어 PET은 전체 화면 편집기를 탑재한 최초의 대량 판매 컴퓨터였다. 전체 화면 편집기의 사용 편의성과 속도(라인 기반 편집기에 비해)는 많은 초기 비디오 단말기 구매를 촉진했다.

문서 편집기의 핵심 데이터 구조는 현재 편집 중인 파일의 상태를 나타내는 문자열(문자 시퀀스) 또는 레코드 목록을 관리하는 구조이다.
전자는 단일의 긴 연속적인 배열로 저장될 수 있지만,
텍스트를 더 빠르게 삽입하고 삭제하며 이전 편집을 실행 취소/다시 실행할 수 있는 문서 편집기에 대한 요구는 더 복잡한 시퀀스 데이터 구조의 개발로 이어졌다.
일반적인 문서 편집기는 갭 버퍼, 줄들의 연결 리스트 (예: PaperClip), 피스 테이블, 또는 로프를 시퀀스 데이터 구조로 사용한다.

## 문서 편집기의 종류
[섬네일|오른쪽|프로그래머들 사이에서 인기 있는 문서 편집기인 [마이크로소프트 윈도우에서 실행 중인 이맥스]]
[섬네일|[그놈에 포함된 문서 편집기인 Gedit]]
일부 문서 편집기는 작고 간단하지만, 다른 편집기는 광범위하고 복잡한 기능을 제공한다. 예를 들어, 유닉스 및 유닉스 계열 운영 체제에는 피코 편집기(또는 변형)가 있지만, 많은 경우 vi 및 이맥스 편집기도 포함한다. 마이크로소프트 윈도우 시스템에는 간단한 메모장이 함께 제공되지만, 많은 사람들은 특히 프로그래머들은 더 많은 기능을 가진 다른 편집기를 선호한다. 애플 매킨토시의 클래식 Mac OS에는 기본 TeachText가 있었고, 1994년 SimpleText로 대체되었으며, 맥 OS X에서는 텍스트에디트로 대체되었다. 텍스트에디트는 문서 편집기의 기능과 워드 프로세서의 일반적인 기능(예: 눈금자, 여백, 여러 글꼴 선택)을 결합한다. 이러한 기능은 동시에 사용할 수 없지만, 사용자 명령이나 프로그램이 자동으로 파일 형식을 결정하여 전환해야 한다.

대부분의 워드 프로세서는 플레인 텍스트 형식으로 파일을 읽고 쓸 수 있어 문서 편집기로 저장된 파일을 열 수 있다. 그러나 워드 프로세서에서 이러한 파일을 저장하려면 파일이 플레인 텍스트 형식으로 작성되었는지 확인하고, 문자 인코딩 또는 BOM 설정이 의도된 용도로 파일을 가리지 않도록 해야 한다. 비WYSIWYG 워드 프로세서(예: 워드스타)는 문서 편집기로 더 쉽게 사용될 수 있었고, 실제로 1980년대에는 그렇게 흔히 사용되었다. 이러한 워드 프로세서의 기본 파일 형식은 종종 마크업 언어와 유사하며, 기본 형식은 플레인 텍스트이고 시각적 서식은 비인쇄 제어 문자 또는 이스케이프 시퀀스를 사용하여 구현되었다. 마이크로소프트 워드와 같은 후기 워드 프로세서는 파일을 바이너리 형식으로 저장하며 거의 플레인 텍스트 파일을 편집하는 데 사용되지 않는다.

일부 문서 편집기는 매우 큰 파일 (예: 로그 파일 또는 단일 파일에 저장된 전체 데이터베이스)을 편집할 수 있다. 간단한 문서 편집기는 파일을 컴퓨터의 주 메모리에 읽어 들일 뿐이다. 파일이 클 경우 이 과정이 느릴 수 있으며 전체 파일이 메모리에 들어가지 않을 수도 있다. 일부 문서 편집기는 읽기가 완료될 때까지 사용자가 편집을 시작하지 못하게 한다. 또한 비전문 편집기에서는 편집 성능이 저하되는 경우가 많으며, 키 입력이나 탐색 명령에 응답하는 데 몇 초 또는 몇 분이 걸리기도 한다. 전문 편집기는 큰 파일의 가시적인 부분만 메모리에 저장하는 등의 최적화를 통해 편집 성능을 향상시킨다.

일부 편집기는 프로그래밍이 가능하여 특정 용도에 맞게 사용자 정의할 수 있다. 프로그래밍 가능한 편집기를 사용하면 반복 작업을 쉽게 자동화하거나, 새로운 기능을 추가하거나, 심지어 편집기 프레임워크 내에서 새로운 응용 프로그램을 구현할 수 있다. 사용자 정의의 일반적인 동기 중 하나는 사용자가 더 익숙한 다른 문서 편집기의 명령을 사용하도록 하거나, 사용자가 의존하게 된 누락된 기능을 복제하는 것이다. 소프트웨어 개발자는 종종 작업하는 프로그래밍 언어 또는 개발 환경에 맞게 편집기 사용자 정의를 사용한다. 일부 문서 편집기의 프로그래밍 가능성은 프로그램의 핵심 편집 기능 향상에 국한되지만, 이맥스는 텍스트 파일 편집을 넘어 웹 브라우징, 이메일 읽기, 온라인 채팅, 파일 관리 또는 게임 플레이를 위해 확장될 수 있으며, 종종 문자 사용자 인터페이스를 갖춘 Lisp 실행 환경으로 간주된다. 이맥스는 유닉스 문화의 전통적인 편집기 전쟁에서 라이벌인 Vi를 에뮬레이션하도록 프로그래밍될 수도 있다.

프로그래밍 가능한 편집기 중 중요한 그룹은 REXX를 스크립트 언어로 사용한다. 이러한 "정통 편집기"는 명령과 매크로를 입력할 수 있는 "명령줄"과 라인 명령과 매크로를 입력할 수 있는 텍스트 줄을 포함한다. 대부분의 이러한 편집기는 ISPF/PDF EDIT 또는 XEDIT, IBM의 VM/SP에서 Z/VM까지의 대표적인 편집기인 XEDIT의 파생 제품이다. 이들 중에는 THE, KEDIT, X2, Uni-edit, 및 SEDIT가 있다.

특정 용도를 위해 작성되거나 사용자 정의된 문서 편집기는 사용자가 편집하는 내용을 파악하고, 종종 프로그래밍 용어를 자동 완성하고 관련 문서가 포함된 말풍선을 표시하여 사용자를 돕는다. 소프트웨어 개발자를 위한 많은 문서 편집기는 프로그램의 읽고 쓰기를 더 쉽게 만들기 위해 소스 코드 구문 강조 및 자동 들여쓰기를 포함한다. 프로그래밍 편집기는 종종 사용자가 포함 파일, 함수 또는 변수의 이름을 선택한 다음 해당 정의로 이동할 수 있도록 한다. 일부는 초기 커서 위치를 저장하거나 요청된 정의를 팝업 창이나 임시 버퍼에 표시하여 원래 코드 섹션으로 쉽게 돌아갈 수 있도록 한다. 일부 편집기는 이 기능을 자체적으로 구현하지만, 종종 Ctags와 같은 보조 유틸리티를 사용하여 정의를 찾는다.

## 일반적인 기능
* 검색 및 바꾸기 – 문서 편집기는 텍스트 문자열을 개별적으로, 또는 열린 탭이나 선택된 폴더 내의 파일 그룹에서 검색하고 바꾸는 광범위한 기능을 제공한다. 고급 편집기는 정규 표현식을 사용하여 텍스트나 코드를 검색하고 편집할 수 있다. 추가 기능으로는 선택적 대소문자 구분, 빠른 검색을 위한 검색어 기록 및 자동 완성, 여러 결과를 한 곳에 나열하는 기능 등이 있다.
* 잘라내기, 복사, 붙여넣기 – 대부분의 문서 편집기는 파일 내 또는 파일 간에 텍스트를 복제하고 이동하는 방법을 제공한다.
* UTF-8 인코딩 텍스트 처리 기능.
* 텍스트 서식 – 문서 편집기는 종종 줄 바꿈, 자동 들여쓰기, ASCII 문자를 사용한 글머리 기호 목록 서식, 주석 서식, 구문 강조 등과 같은 기본적인 시각적 서식 기능을 제공한다. 이러한 기능은 일반적으로 표시용이며 파일 자체에 서식 코드를 삽입하지 않는다.
* 실행 취소 및 다시 실행 – 워드 프로세서와 마찬가지로 문서 편집기는 마지막 편집을 실행 취소하고 다시 실행할 수 있는 방법을 제공한다. 종종, 특히 구형 문서 편집기에서는 한 수준의 편집 기록만 기억하고 연속적으로 실행 취소 명령을 내리면 마지막 변경 사항만 "토글"된다. 최신 또는 더 복잡한 편집기는 일반적으로 여러 수준의 기록을 제공하여 실행 취소 명령을 반복적으로 내리면 문서가 연속적으로 이전 편집으로 되돌아간다. 별도의 다시 실행 명령은 편집을 가장 최근 변경 사항으로 "앞으로" 순환시킨다. 기억되는 변경 사항의 수는 편집기에 따라 다르며 종종 사용자가 구성할 수 있다.
* 지정된 줄 번호로 이동하는 기능.

## 고급 기능
* 매크로 또는 프로시저 정의: 이전 명령 또는 다른 매크로의 조합으로 새 명령 또는 기능을 정의하며, 매개변수를 전달하거나 매크로를 중첩할 수도 있다.
* 편집 세션 간에 사용자가 설정한 옵션을 유지하기 위한 프로필.
* 환경, 프로필 등에서 지정된 이름의 프로필 매크로로, 편집 세션 시작 시 또는 새 파일을 열 때 자동으로 실행된다.
* 다중 파일 편집: 편집 세션 중에 여러 파일을 편집하는 기능으로, 각 파일의 현재 줄 커서를 기억하고, 각 파일에 반복되는 텍스트를 삽입하고, 파일 간에 텍스트를 복사하거나 이동하고, 나란히 파일 비교 (타일 다중 문서 인터페이스를 사용 가능) 등을 수행한다.
* 다중 뷰 편집기: 동일한 파일의 여러 뷰를 독립적인 커서 추적과 함께 표시할 수 있으며, 창 간에 변경 사항을 동기화하지만 독립적인 파일에 사용할 수 있는 것과 동일한 기능을 제공한다.
* 접기/펼치기, 일명 코드 폴딩: 텍스트의 특정 부분을 일시적으로 보이지 않게 하는 기능. 이는 줄 번호 범위 또는 구문 요소(예: **BEGIN;**과 일치하는 **END;** 사이의 모든 내용 제외)를 기반으로 할 수 있다.
* 열 기반 편집; 특정 열에서 데이터를 변경하거나 삽입하거나 데이터를 특정 열로 이동시키는 기능.
* 데이터 변환 – 현재 편집 중인 파일에 다른 텍스트 파일의 내용을 읽거나 병합한다. 일부 문서 편집기는 운영 체제의 셸에 발행된 명령의 출력을 삽입하는 방법을 제공한다. 또한, 대소문자 변경 기능은 소문자 또는 대문자로 번역할 수 있다.
* 필터링 – 일부 고급 문서 편집기는 편집기가 편집 중인 파일의 전체 또는 일부를 다른 유틸리티로 보내고 그 결과를 "필터링된" 줄 대신 파일로 다시 읽어 들일 수 있도록 한다. 예를 들어, 일련의 줄을 알파벳순 또는 숫자순으로 정렬하거나, 수학적 계산을 수행하거나, 소스 코드를 들여쓰기하는 등에 유용하다.
* 구문 강조 – 소스 코드, 마크업 언어, 구성 파일 및 조직적이거나 예측 가능한 형식으로 나타나는 기타 텍스트를 문맥에 맞게 강조 표시한다. 편집기는 일반적으로 사용자가 각 언어 요소에 사용되는 색상이나 스타일을 사용자 정의할 수 있도록 한다. 일부 문서 편집기는 사용자가 테마를 설치하고 사용하여 편집기의 전체 사용자 인터페이스의 룩 앤드 필을 변경할 수 있도록 한다.
* 구문 지향 편집기 - 일부 편집기는 하나 이상의 언어의 구문을 지원하며, 구문 단위로 작업을 허용한다(예: **SELECT** 문에 새 **WHEN** 절 삽입).
* 확장성 - 프로그래머가 사용할 문서 편집기는 일부 플러그인 메커니즘을 제공하거나 스크립팅 가능해야 하므로, 프로그래머가 개별 소프트웨어 프로젝트를 관리하는 데 필요한 기능으로 편집기를 사용자 정의하거나, 특정 프로그래밍 언어 또는 버전 관리 시스템에 대한 기능을 사용자 정의하거나 키 바인딩을 사용자 정의하거나, 특정 코딩 스타일을 따를 수 있다.
* 커서 탐색은 문서 편집기마다 다를 수 있다. 예를 들어, End를 두 번 누르면 한 번 눌렀을 때 화면에 표시된 텍스트 줄 끝으로 이동한 후 줄 바꿈된 줄의 끝으로 이동할 수 있다. 블록 지향 터미널은 일반적으로 전용 커서 이동 키를 가지며, 개인용 컴퓨터의 키보드도 마찬가지이다.
* 명령줄 - 일부 편집기(예: ISPF, XEDIT)는 텍스트가 아닌 명령을 입력하기 위한 전용 화면 필드를 가지고 있다. 편집기에 따라 사용자는 커서 키를 사용하여 명령 및 텍스트 필드 사이를 전환해야 하거나, 편집기가 특정 기능 키 등을 전환 요청으로 해석할 수 있다.
* 라인 명령, 접두사 명령 또는 시퀀스 명령이라고도 함 - 일부 편집기는 파일을 관련 줄 번호 또는 시퀀스 번호가 있는 텍스트 줄의 배열로 취급하며, 각 텍스트 필드에 대한 별도의 줄 번호 필드를 가진다. 라인 명령은 사용자가 줄 번호 필드에 입력하고 편집기가 해당 특정 줄 또는 줄 블록에 대한 명령으로 인식하는 문자열이다(예: 줄을 소문자로 변환하는 **LC**, 블록을 오른쪽으로 세 열 이동하는 **))3**). 일부 편집기는 접두사 매크로 또는 시퀀스 매크로라고도 하는 라인 매크로도 지원한다. 접두사 명령이라는 이름에도 불구하고 일부 편집기는 시퀀스 필드가 텍스트 필드 뒤에 나타나도록 허용한다.
* 문서 편집기, 특히 소스 코드 편집기는 일반적으로 콜론과 세미콜론과 같이 유사한 문자(호모글리프)를 명확하게 구분하는 고정폭 글꼴을 기본값으로 사용한다.

## 전문 편집기
일부 편집기에는 특수 기능과 추가 기능이 포함되어 있다. 예를 들어:

* 소스 코드 편집기는 소스 코드 생성을 용이하게 하는 추가 기능을 가진 문서 편집기이다. 이러한 편집기는 종종 사용자 프로그래밍 가능한 구문 강조 및 코드 탐색 기능뿐만 아니라 HTML 편집기와 유사한 코딩 도구 또는 키보드 매크로를 제공한다.
* 폴딩 에디터. 이 하위 클래스에는 Xedit의 파생 제품인 소위 "정통 편집기"가 포함된다. 프로그래밍 특정 기능 없이 폴딩을 구현하는 편집기는 일반적으로 아웃라이너라고 불린다(아래 참조).
* 아웃라이너. 계층적 아웃라인 트리 뷰와 문서 편집기를 결합했기 때문에 트리 기반 편집기라고도 불린다. 폴딩(위 참조)은 특수한 형태의 아웃라인으로 간주될 수 있다.
* IDE (통합 개발 환경)는 대규모 프로그래밍 프로젝트를 관리하고 간소화하도록 설계되었다. 단순한 텍스트 편집에는 불필요한 많은 기능을 포함하고 있으므로 일반적으로 프로그래밍에만 사용된다.
* 월드 와이드 웹 저자에게는 웹 페이지를 만드는 작업을 전담하는 다양한 HTML 편집기가 제공된다. 여기에는 드림위버, KompoZer, E 텍스트 편집기가 포함된다. 많은 편집기는 내장 웹 브라우저 엔진 또는 표준 웹 브라우저에서 작업 진행 상황을 볼 수 있는 옵션을 제공한다. 그러나 대부분의 웹 개발은 소스 코드 편집기 또는 IDE를 사용하여 루비 또는 PHP와 같은 동적 프로그래밍 언어로 수행된다. 가장 간단한 정적 웹사이트를 제외한 모든 웹사이트에서 제공되는 HTML은 개별 템플릿 파일로 저장되며, 이는 사이트를 제어하는 소프트웨어에 의해 조립되며 완전한 HTML 문서를 구성하지 않는다.
* 수학자, 물리학자, 컴퓨터 과학자들은 종종 TeX 또는 LaTeX를 사용하여 일반 텍스트 파일로 논문과 책을 만든다. 이러한 문서는 종종 표준 문서 편집기로 만들어지지만, 일부 사람들은 전문 TeX 편집기를 사용한다.
* 협업 편집기를 통해 여러 사용자가 네트워크를 통해 원격 위치에서 동시에 동일한 문서를 작업할 수 있다. 개별 사용자가 변경한 내용은 자동으로 추적되고 문서에 병합되어 충돌하는 편집 가능성을 제거한다. 이러한 편집기는 일반적으로 편집자 간의 토론을 위한 온라인 채팅 구성 요소도 포함한다.
* 집중 방해 없는 편집기는 작성자가 다른 응용 프로그램 및 운영 체제로부터 격리되어 도구 모음이나 알림 영역과 같은 인터페이스 요소로부터 방해받지 않고 글쓰기에 집중할 수 있도록 하는 미니멀리즘 인터페이스를 제공한다.

프로그래밍 가능한 편집기는 일반적으로 이러한 기능 중 전부 또는 일부를 수행하도록 향상될 수 있지만, 더 간단한 편집기는 단 하나에만 집중하거나, gPHPedit와 같이 단일 프로그래밍 언어를 대상으로 한다.

## 종류

[thumbnail|right|[마이크로소프트 윈도우에서 실행 중인 Emacs. 프로그래머들 사이에서 유명한 문서 편집기의 하나이다.]]

* 유닉스 계열: 보통 vi 계열, 이맥스 등이 설치되어 있다.
* 그놈 계열: Gedit 등이 설치되어 있다.

## 같이 보기

* 워드 프로세서
* 파일 뷰어

## 각주

; 내용주



분류:기술 소통 도구