나노 문서편집기 (Nano)

유닉스 계열에서 주로 사용하는 편집기는 vi 편집기이다. 하지만, 리눅스나 유닉스를 처음 접하는 초보자에게는 너무 복잡하다. GNU에서 만든 Nano 라는 편집기는 기능은 적지만 설정 파일의 간단한 편집같은 것은 할 수 있으며, 조작이 쉽다.

자동 들여쓰기 기능

프로그래밍의 코드블럭을 구분하기 위해서 들여쓰기를 많이 한다. 대부분 TAB키등으로 띄우지만, 깊어지면 힘들어진다. 이 들여쓰기를 자동으로 해 주는 기능이 있다. 자동 들여쓰기를 활성화 하기 위해서는 Alt+I를키 누르거나, Alt키가 먹지 않는다면, ESC키를 누르고 I를 누르면 활성화된다.

스마트 Home 키 기능

프로그래밍 하다가 그 줄의 맨 앞으로 갈 때가 있다. 이럴 때 HOME키를 누르게 되며, 이러면 코드블럭을 위해서 띄워놓은 공백로으 갈 때가 있다. 하지만, 스마트 HOME키 기능을 활성화 하면, 공백을 무시한 처음 글짜에 커서가 위치한다. 이 기능 을 활성화 하기 위해서 Alt + H 키를 누른다.

유니코드 지원

다국어 지원을 위해서 유니코드(UTF-8)를 지원한다.

아주 간단한 파일 브라우징 기능 제공

편집할 파일을 읽기 위해서 Ctrl+R 키를 누르고, Ctrl+T 키를 누르면 간한하게 파일리 스트를 볼 수 있고 선택하여 편집할 수 있다.

  • 저장 : Ctrl + O
  • 종료 : Ctrl + X
  • 찾기 : Ctrl + W
  • 찾고 바꾸기 : Ctrl + \
  • 블럭지정 : Ctrl + ^
  • 잘라내기 : Ctrl + K
  • 붙여넣기 : Ctrl + U
  • 줄바꿈 선택 : ESC → $

설치

우분투에 기본적으로 같이 설치된다.

단축키 변경

단축키를 마음대로 변경 할 수 있다. 노트패드와 비슷하게 바꾸어 보았다. /etc/nanorc 에 추가하면 된다.

sudo nano /etc/nanorc
bind ^A mark main # 모두 선택
bind ^S writeout main  # 저장
bind ^X cut all      # 한줄자르기
bind ^V paste all      # 한줄붙이기
bind ^C copy main   # 한줄복사
bind ^H replace main    # 찾아바꾸기
bind ^Q exit all       # 종료
bind ^Z undo main       # 되돌리기
bind ^F whereis all      # 찾기
bind ^G findnext all # 다찾기
bind F10 exit main      #  종료

구문강조

conf.nanorc
### 편의를 위한 각종 설정파일 강조.
syntax "config" "(\.|/|)config$" "(\.|/|)conf$" "(\.|/|)logout$" "(\.|/|)COLORS$" "(\.|/|)colors$"
color red "/.*$" "TERM" "\..*$" "=.*$" "\*.*$"
color white ":unscaled" "[0-9]"
color blue "setenv|export" "\;"
color green "#.*$"
ngnix.nanorc
syntax "Nginx" "nginx.*\.conf$" "\.nginx$"
header "^(server|upstream)[a-z ]*\{$"
 
color brightmagenta  "\<(events|server|http|location|upstream)[[:space:]]*\{"
color cyan  "(^|[[:space:]{;])(access_log|add_after_body|add_before_body|add_header|addition_types|aio|alias|allow|ancient_browser|ancient_browser_value|auth_basic|auth_basic_user_file|autoindex|autoindex_exact_size|autoindex_localtime|break|charset|charset_map|charset_types|chunked_transfer_encoding|client_body_buffer_size|client_body_in_file_only|client_body_in_single_buffer|client_body_temp_path|client_body_timeout|client_header_buffer_size|client_header_timeout|client_max_body_size|connection_pool_size|create_full_put_path|daemon|dav_access|dav_methods|default_type|deny|directio|directio_alignment|disable_symlinks|empty_gif|env|error_log|error_page|expires|fastcgi_buffer_size|fastcgi_buffers|fastcgi_busy_buffers_size|fastcgi_cache|fastcgi_cache_bypass|fastcgi_cache_key|fastcgi_cache_lock|fastcgi_cache_lock_timeout|fastcgi_cache_min_uses|fastcgi_cache_path|fastcgi_cache_use_stale|fastcgi_cache_valid|fastcgi_connect_timeout|fastcgi_hide_header|fastcgi_ignore_client_abort|fastcgi_ignore_headers|fastcgi_index|fastcgi_intercept_errors|fastcgi_keep_conn|fastcgi_max_temp_file_size|fastcgi_next_upstream|fastcgi_no_cache|fastcgi_param|fastcgi_pass|fastcgi_pass_header|fastcgi_read_timeout|fastcgi_send_timeout|fastcgi_split_path_info|fastcgi_store|fastcgi_store_access|fastcgi_temp_file_write_size|fastcgi_temp_path|flv|geo|geoip_city|geoip_country|gzip|gzip_buffers|gzip_comp_level|gzip_disable|gzip_http_version|gzip_min_length|gzip_proxied|gzip_static|gzip_types|gzip_vary|if|if_modified_since|ignore_invalid_headers|image_filter|image_filter_buffer|image_filter_jpeg_quality|image_filter_sharpen|image_filter_transparency|include|index|internal|ip_hash|keepalive|keepalive_disable|keepalive_requests|keepalive_timeout|large_client_header_buffers|limit_conn|limit_conn_log_level|limit_conn_zone|limit_except|limit_rate|limit_rate_after|limit_req|limit_req_log_level|limit_req_zone|limit_zone|lingering_close|lingering_time|lingering_timeout|listen|location|log_format|log_not_found|log_subrequest|map|map_hash_bucket_size|map_hash_max_size|master_process|max_ranges|memcached_buffer_size|memcached_connect_timeout|memcached_next_upstream|memcached_pass|memcached_read_timeout|memcached_send_timeout|merge_slashes|min_delete_depth|modern_browser|modern_browser_value|mp4|mp4_buffer_size|mp4_max_buffer_size|msie_padding|msie_refresh|open_file_cache|open_file_cache_errors|open_file_cache_min_uses|open_file_cache_valid|open_log_file_cache|optimize_server_names|override_charset|pcre_jit|perl|perl_modules|perl_require|perl_set|pid|port_in_redirect|postpone_output|proxy_buffer_size|proxy_buffering|proxy_buffers|proxy_busy_buffers_size|proxy_cache|proxy_cache_bypass|proxy_cache_key|proxy_cache_lock|proxy_cache_lock_timeout|proxy_cache_min_uses|proxy_cache_path|proxy_cache_use_stale|proxy_cache_valid|proxy_connect_timeout|proxy_cookie_domain|proxy_cookie_path|proxy_hide_header|proxy_http_version|proxy_ignore_client_abort|proxy_ignore_headers|proxy_intercept_errors|proxy_max_temp_file_size|proxy_next_upstream|proxy_no_cache|proxy_pass|proxy_pass_header|proxy_read_timeout|proxy_redirect|proxy_send_timeout|proxy_set_header|proxy_ssl_session_reuse|proxy_store|proxy_store_access|proxy_temp_file_write_size|proxy_temp_path|random_index|read_ahead|real_ip_header|recursive_error_pages|request_pool_size|reset_timedout_connection|resolver|resolver_timeout|return|rewrite|root|satisfy|satisfy_any|secure_link_secret|send_lowat|send_timeout|sendfile|sendfile_max_chunk|server|server|server_name|server_name_in_redirect|server_names_hash_bucket_size|server_names_hash_max_size|server_tokens|set|set_real_ip_from|source_charset|split_clients|ssi|ssi_silent_errors|ssi_types|ssl|ssl_certificate|ssl_certificate_key|ssl_ciphers|ssl_client_certificate|ssl_crl|ssl_dhparam|ssl_engine|ssl_prefer_server_ciphers|ssl_protocols|ssl_session_cache|ssl_session_timeout|ssl_verify_client|ssl_verify_depth|sub_filter|sub_filter_once|sub_filter_types|tcp_nodelay|tcp_nopush|timer_resolution|try_files|types|types_hash_bucket_size|types_hash_max_size|underscores_in_headers|uninitialized_variable_warn|upstream|user|userid|userid_domain|userid_expires|userid_name|userid_p3p|userid_path|userid_service|valid_referers|variables_hash_bucket_size|variables_hash_max_size|worker_priority|worker_processes|worker_rlimit_core|worker_rlimit_nofile|working_directory|xml_entities|xslt_stylesheet|xslt_types)([[:space:]]|$)"
color brightcyan  "\<(on|off)\>"
color brightyellow "\$[A-Za-z][A-Za-z0-9_]*"
color red "[*]"
color yellow ""(\\.|[^"])*"|'(\\.|[^'])*'"
color yellow   start="'$" end="';$"
color green "(^|[[:space:]])#([^{].*)?$"
#color ,green "[[:space:]]+$"
#color ,red "    + +| +    +"

저장 위치

/usr/share/nano/conf.nanorc

위와 같이 파일을 만들어 넣으면 된다.

asm.nanorc     fortran.nanorc   man.nanorc     ocaml.nanorc   ruby.nanorc
awk.nanorc     gentoo.nanorc    mgp.nanorc     patch.nanorc   sh.nanorc
c.nanorc       groff.nanorc     mutt.nanorc    perl.nanorc    tcl.nanorc
cmake.nanorc   html.nanorc      nano-menu.xpm  php.nanorc     tex.nanorc
css.nanorc     java.nanorc      nanorc.nanorc  pov.nanorc     xml.nanorc
debian.nanorc  makefile.nanorc  objc.nanorc    python.nanorc

기본으로 깔린다.

추가적인 컬러파일은 https://github.com/scopatz/nanorc 참조.

역링크