Tistory블로그에서도 최근에 기본 문서 에디터로 마크다운 문법을 지원하기 시작 한 듯 하다.
간결하게 내용 위주로 문서를 작성할 수 있고 표현 포맷의 정형화 과정도 나름 쉽게 할 수 있다는 점에서 마크다운 문법은 꽤 괜찮은 언어라고 생각한다.

이번 페이지에서는 순수 기본 에디터만을 이용하여 마크다운 문법에 대해 작성 해 보고
기본 작성 내용을 기반으로 문서 내 HTML태그 혹은 CSS등 스타일시트 내용을 적용하여 문서를 보다 예쁘게 작성하는 식으로 나아가려 한다.

Markdown Page List

마크다운 문법 - 1. 기본 작성


제목

  • HTML의 <h1>, <h2> 등의 태그와 같이 제목 표현을 할 수 있다.
  • <h1> ~ <h6>까지 6단계로 작성 가능하다.
  • 보통 기본 문법으로는 지원하지 않는 경우가 많지만, toc(목차) 생성을 지원하는 마크다운 포맷에서는 목차 기준이 된다.
  • #를 통해 제목을 표현한다.
마크다운 문법 표현
# 1단계

1단계

## 2단계

단계

### 3단계

3단계

#### 4단계

4단계

##### 5단계
5단계
###### 6단계
6단계
  • 보통 전체 페이지의 대 제목은 =문자를 3개 이상 나열하여 표현하기도 한다.
제목
====

강조

  • 문자나 글귀 강조를 위해 사용(굵은 글씨, 기울임 체 등)
마크다운 문법 같은 의미의 HTML 태그 표현
*기울임꼴* 또는 _기울임꼴_ <em> 기울임꼴
**굵게** 또는 __굵게__ <strong> 굵은 글씨 체
~~취소선~~ <del> 취소선
없음 <u> 마크다운 문법에는 없음

인용

  • 인용표현으로 하고자 하는 내용앞에 >문자로 표현한다
> 인용문이 있고, 
>> _인용구 안에 인용문을 다음과 같이 표현할 수 있다._
  • 위 블럭 안의 내용은 아래와 같이 표현 된다.

    인용문이 있고,

    인용구 안에 인용문을 다음과 같이 표현할 수 있다.

목록

  • 순서 있는 목록(ordered list)과 순서 없는 목록(unordered list)으로 표현 할 수 있다.
  • 순서 있는 목록은 오로지 오름차순 형태로만 정렬 가능하다.
  • 리스트 표현 상에서의 depth는 탭을 이용하여 구분한다.
  • 순서 있는 목록은 숫자.로 표현한다.
  • 순서 없는 목록은 +, *, -문자들을 통해 표현하며 모든 기호는 리스트의 depth가 동일한 경우 동일한 기호로 표현 된다.
* C++
    1. C
    1. C++
    1. Template
        1. Meta Programming
        1. Generic Programming
+ Python
- Markup Language
    1. HTML
        * HTML5
    1. XML
    1. Markdown
  • 위 블럭은 아래와 같이 표현 된다.
    • C++
      1. C
      2. C++
      3. Template
        1. Meta Programming
        2. Generic Programming
    • Python
    • Markup Language
      1. HTML
        • HTML5
      2. XML
      3. Markdown

수평선

  • \<hr\>태그와 같은 수평선을 *문자 혹은 -문자를 단독으로 나열함으로써 표현 할 수 있다.
마크다운 문법 표현
* * *
***
---
- - -

위 의 표현 열 들의 결과는 마크다운 기본 문법으로 표현이 되지 않아 <hr> 태그로 표현함.

줄바꿈(Line Breaks)

  • 라인의 끝에 2개의 공백을 넣고 다음 라인을 시작한다.
  • <br> 태그를 직접 사용한다
마크다운 문법 결과
동해
남해
동해
남해
소나무<br>쿼드로 소나무
쿼드로

링크

  • 마크다운의 링크는 크게 외부링크와 내부링크로 나눌 수 있다.

    • 외부링크
    1. 인라인링크
      [표현문구](링크주소 "툴팁 텍스트")

      구글

    2. 참조링크
      [표현문구][1]
      (... 다른 내용 쓰다가 문서 어디서든) [1]: https://google.com "구글"

      [구글][1]
      (다른 내용들을 기입하던 중이라도 상관 없이 쓸 수 있다)
      [1]: https://google.com "구글"

    3. URL 링크
    • 마크다운 문서내 일반적으로 url 주소 혹은 e-mail 주소등은 링크로 표현이 되며 아래와 같으 <, >문자들을 통해서도 주소 설정이 가능하다.

      <https://google.com>

      https://google.com

    • 내부링크

      • 문서 내 참조(책갈피) 등 때 사용하는 것으로 이동하고자 하는 위치에는 #문자로 마킹 된 title 항목이 있는 곳만 가능하다.
      • 이동하고자 하는 위치의 title 은 영문으로만 이뤄진 곳이라야 한다.
        [표현문구](#marked-title)
        : # 문자로 제목으로 지정되어야 하며 링크로 지정하는 내용이 소문자와 '-'문자로만 쓰여져야 하기 때문에 영문으로만 이뤄진 것이어야 한다.
        ex [마크다운 페이지 LIST](#markdown-page-list)

        마크다운 페이지 LIST

각주(footnote)

  • 보통 보충 설명 및 출처 공개 등에 사용한다.
    마크다운[^markdown]
    (... 문서 내 어디서든)
    [^markdown]: 마크다운 (Markdown)은 마크업 언어의 일종으로, 존 그루버(John Gruber)와 아론 스워츠(Aaron Swartz)가 만들었다. 온갖 태그로 범벅된 HTML 문서 등과 달리, 읽기도 쓰기도 쉬운 문서 양식을 지향한다.

    마크다운[^markdown]

[^markdown]: 마크다운 (Markdown)은 마크업 언어의 일종으로, 존 그루버(John Gruber)와 아론 스워츠(Aaron Swartz)가 만들었다. 온갖 태그로 범벅된 HTML 문서 등과 달리, 읽기도 쓰기도 쉬운 문서 양식을 지향한다.

이미지

  • 이미지의 경우는 링크의 마크다운 문법과 매우 유사하다. 외부 링크 방식의 기본 마크다운 문법 앞에 !만 붙여 준다고 생각 하면 된다.
  • 다만, 이미지의 크기나, 결과물에서의 배치(레이아웃)등을 조절하는 것에는 자유롭지 못하다.

테이블

  • 표 내부에는 줄 바꿈을 지원하지 않기 때문에 직접 <br> 태그를 이용해야 한다
  • 헤더 셀을 구분하기 위해서는 최소 3개 이상의 - (dash)를 나열해야 한다.
  • 셀 병합에 대한 기능이 유연하지 않으며, 표준 지원이 아닌 듯 하다.
  • 정말 간단하게 작성할 테이블이 아니라면, <table> 태그를 익혀 쓰는게 유용하고 깔끔 할 것 같다.
    |    값        |                의미            |  기본값          |
    | ---------- | :---------------------: | :------------ |
    |`static`    | 유형(기준) 없음 / 배치 불가능 | `static`    |
    |`relative`    | 요소 **자신**을 기준으로 배치|          |
    |`absolute`    | 선행자 요소를 기준으로 배치    |          |
    |`fixed`    | *브라우저 창*을 기준으로 배치    |          |
    | cell span    | cell that spans across two columns       ||
  • 티스토리기본 마크다운 에디터 상에서는 아래와 같이 표현 된다.(셀 병합을 의도한 가장 마지막 행이 제대로 적용되어 있지 않은 것으로 나온다)
    의미 기본값
    static 유형(기준) 없음 / 배치 불가능 static
    relative 요소 자신을 기준으로 배치
    absolute 선행자 요소를 기준으로 배치
    fixed 브라우저 창을 기준으로 배치
    cell span cell that spans across two columns

Code Blocks

  • ~문자 3개를 나열한 뒤, 표현할 프로그램 language명을 명시하면 해당 언어에 맞는 코드 내용을 깔끔하게 표현 할 수 있다.
  • ~문자는 ` 문자로 대체 가능하다.
  • 표준으로 지정된 사항은 없는 듯 하다, markdown문법을 지원하여 변환해주는 확장 기능에 따라 적용 형식 (~~~{.cpp})이나 코드 하이라이트 스타일을 지원해주는 언어의 종류 등이 달라지는 듯.
  • 기본적으로는 대중적인 프로그램 관련 언어들은 거의 지원하는 것 같다.
    ``` cpp
    class Stack { ... };
    ```

Tistory 기본 마크다운 에디터 상에서는 코드 하이라이트 등의 스타일이 지원되지 않는 듯 하다.

class Stack {
public:
    void Pop();
    int Top();
};

결론

  • 비록 마크다운 작성 문법만으로는 정말 보기 좋게, 예쁘게 결과 문서를 만들어 낼 수 없다.
  • 다만, 순수 마크다운 작성 문법은 매우 쉽다.
  • 정말 간결하게, 내용 위주로 빠르게 결과문서를 작성하면서, 표현 포맷을 정형화 시키기에는 최적이라는 생각이다.
  • 지금 이 문서를 기반으로 간단한 HTML 태그와 css 스타일 적용을 통해 보다 나은 형태로 결과 문서를 바꿔보자.

001-markdown-base.md
9.5 kB

블로그 이미지

나오K

,

git 사용, 비밀번호 캐쉬하기

출처: [권선우의 스타트업하는 개발자]

git 사용 시, github 또는 bitbucket등의 원격 저장소에서 pull/push 할 경우 비밀번호 입력을 요구하게 되는데, 나 혼자 사용하는 환경에서 매번 비밀번호를 입력하는 게 번거로워 찾게 되었다.

방법은 git 설정 credetial.helper를 이용하는 것으로, 해당 방법을 통해 영원히 비밀번호 정보를 묻지않게 끔 할 수는 없으며, 그러기 위해서는 OS 단에서 제공해주는 ‘자격 증명 인증’이나 third-party 등의 외부 프로그램에서 제공하는 credential helper 옵션등을 이용해야 한다고 한다.

  • 설정 방법
    $ git config --global credential.helper 'cache --timeout=8640000'
    
    --global 옵션으로 설정 범위를 지정하며, --timeout=유지기간(초 단위)부분에 원하는 기간만큼의 값을 입력 해주면 된다.


블로그 이미지

나오K

,

.vimrc 설정 정리

Linux 2018. 8. 29. 16:38

vimrc 설정

vim설정을 위한 .vimrc 내용들 정리. 주로 내가 사용할 내용들만을 기준으로 다룰 것이다.

1. 기본 설정

set nocompatible        " 오리지널 vi와 호환되지 않게.
filetype off            " Vundle 설정을 위한 시작 부분 

" for Vundle -----------------------------------------

" end of Vundle -------------------------------------

" vim 기본 설정 영역
filetype plugin indent on

colorscheme molokai        " 컬러 스킴 설정.(plugin 설치 필요)

" Syntax 지원
if has("syntax")
    syntax on
endif

set encoding=utf-8         " encoding 설정
set fileencodings=utf-8,cp949,default,latin1
set termencoding=utf-8

" set printencoding=utf-8 " 인쇄 encoding 옵션
" set printmbcharset=ISO10646
" set printmbfont=r:NanumGothiccoding,c:yes,a:yes

set number                " 좌측 라인 넘버 표시
set numberwidth=6        " 넘버 표시 공간의 너비

set title                " 하단 편집 문서의 이름 표시
set ruler                " 하단부에 현재 커서의 위치를 표시

set shiftwidth=4        " 들여쓰기 간격
set tabstop=4            " tab 간격
" set expandtab            " tab을 space로 변경하여 저장

set cindent                
set autoindent            " 자동 들여쓰기
set smartindent

set hlsearch            " 검색 결과 강조
set incsearch            " 증가 방향으로 검색
set nowrapscan            " 검색 시 파일 끝에서 되돌려 검색하지 않게
set ignorecase            " 검색 시 대소문자 구분하지 않음

set nowrap                " 자동 줄 바꿈 사용하지 않음

set autowrite            " 자동 저장
set autoread        

" set paste                " 붙여 넣기 시 계단현상 방지
set showmatch            " 커서 위치 시 괄호의 끝 혹은 시작을 반전으로 표시

" 하단 상태 표시 라인 설정(vim-airline 플러그인 사용으로 대체)
" set statusline=%4*%<\ %1*[%F]
" set statusline+=%4*\ %5*[%{&encoding}, " encoding
" set statusline+=%{&fileformat}]%m " file format
" set statusline+=%4*%=\ %6*%y%4*\ %3*%l%4*/%L,\ %3*%c%4*\ \<\ %2*%P%4*\ \>
set laststatus=2        " 상태 라인 표시 위해(vim-airline 에서도 사용)

" set cursorline        " 현재 커서가 있는 라인을 강조

set tagbsearch            " 태그 데이터 베이스를 이진으로 검색

여기까지가 vim 을 위한 기본 설정 부분이었다.

주 참고 블로그: jjeong

2. Vundle을 이용한 플러그인 설치 및 설정

Vundle 이란 vim의 다양한 플러그인들을 설치 하기 쉽게 관리해주는 플러그인 매니저 이다.

가장 먼저 Vundle 플러그인을 설치해야 하는데, github에서 저장소를 clone 하는 형식으로 해당 플러그인을 설치할 수 있다.

$ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

그런 다음 Vundle 플러그인 활성화를 위한 작업을 해주어야 한다. 이 작업은 .vimrc 파일에서 Plugin 들을 명시하는 것으로 나의 경우는 1. 기본 설정에서" for Vundle -------" end of Vundle ------부분 사이에 설정 라인들을 넣었다.

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim

call vundle#begin()        " 관리할 플러그인들을 기술하기 위한 시작

" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'    " Vundle 관리를 위해 필요한 부분

" 관리할 플러그인 항목들을 나열한다. 
Plugin 'scrooloose/nerdtree'            " 파일트리 창을 보여 줄 수 있는 플러그인
Plugin 'scrooloose/nerdcommenter'        " 멀티라인 주석, 부분 주석 등에 대한 처리를 할 수 있는 플러그인
Plugin 'vim-airline/vim-airline'        " 하단 상태바에 더 많은 정보를 출력
Plugin 'tpope/vim-fugitive'                " vim에서 git의 기능을 사용할 수 있게 해준다
" Plugin 'scrooloose/syntastic'            " vi로 편집 중 실시간으로 문법 체크 기능을 제공 해 주는 플러그인
Plugin 'ctrlpvim/ctrlp.vim'                " 파일 찾기 기능(VS AssistX의 파일 네비게이터와 동일한 역할)

" Color scheme -----------------------------
Plugin 'altercation/vim-colors-solarized'
Plugin 'tomasr/molokai'
Plugin 'nanotech/jellybeans.vim'
" ------------------------------------------
"
Plugin 'valloric/youcompleteme'            " 코드 자동 완성 기능을 위한 플러그인
Plugin 'taglist.vim'                    " 디파인 매크로, 함수, 변수 등의 리스트를 정렬하여 보여 줄 수 있는 플러그인
Plugin 'DoxygenToolkit.vim'                " Doxygen 스타일의 주석을 자동으로 삽입 가능한 기능을 가진 플러그인
Plugin 'davidhalter/jedi-vim'            " python에 대한 문법 preview 기능(?)
" Plugin 'brookhong/cscope.vim'

filetype plugin indent on

call vundle#end()        " 관리 플러그인 종료

위와 같이 사용할 플러그인들을 넣어 준 후 .vimrc 저장한다. 위 기술한 Plugin들이 내가 사용하고자 하는 것들이며 더 많은 vim의 플러그인들은 Vim Awesome에서 찾아 볼 수 있다.

이제 vi의 커맨드 라인 모드 상에서 간단한 명령어를 통해 플러그인들을 설치 및 삭제 또는 조회 해 볼 수 있다.

  • PluginInstall: call vundle#begin()call vundle#end() 사이에 기술한 플러그인들을 설치 해 준다.
  • PluginList: 현재 .vimrc 파일에 기술 되어 있는 플러그인들을 볼 수 있다.
  • PluginClean: 설치한 플러그인을 지울 때 사용하는 명령어로 지우고 싶은 플러그인을 .vimrc에서 지우고 저장한 뒤 해당 명령어를 수행하도록 한다.

이상, 여기까지 Vundle을 이용해 간단히 플러그인들을 설치 하는 법을 알아 보았다. 물론 vim을 더 미려하게 사용할 수 있게 해주는 플러그인들은 설치 이후에 설정을 해 주어야만 된다.(보통 .vimrc을 통해 설정을 한다)

각자 나름대로 사용할 플러그인들의 상세 설정은 Vim Awesome 또는 검색을 통해 보다 더 많은 정보를 얻을 수 있을 것이다.

3. 단축키(키맵) 설정

참조: [vim wiki])

"-------------------------------------------------------
" key mappings
nmap <F3> <ESC>:wa!<CR>
nmap <F4> <ESC>:wqa!<CR>

nmap <F7> <ESC>:Tlist<CR>
nmap <F8> <ESC>:NERDTreeToggle<CR>
nmap <leader><F8> <ESC>:NERDTreeFind<CR>

if has("autocmd")

    " 자동완성
    " autocmd FileType * inoremap { {}<LEFT>
    " autocmd FileType * inoremap [ []<LEFT>
    " autocmd FileType * inoremap ( ()<LEFT>
    " autocmd FileType * inoremap " ""<LEFT>
    " autocmd FileType * inoremap ' ''<LEFT>

    " Python 설정
    autocmd BufNewFile,BufRead *.py setfiletype python
    autocmd FileType python nmap <F5> <ESC>:wa!<CR>:!python3 %<CR>

    " C++ 설정
    autocmd BufNewFile,BufRead *.h,*.hpp,*.cc,*.c,*.cpp setfiletype cpp
    autocmd FileType cpp nmap <F5> <ESC>:wa!<CR>:!make<CR>:cw<CR>
    autocmd FileType cpp nmap <F6> <ESC>:cn<CR>
endif

4. 기타 Plugin 설정 내용들

플러그인들의 사용과 관련해 주로 많이 참조한 블로그: [Bluesh님 블로그]
내가 사용하는 플러그인 및 설정한 내용 위주로 정리.

  • NERDTree

    let NERDTreeQuitOnOpen = 1
    let NERDTreeShowHidden = 1
    let g:NERDTreeWinPos = "right"
    
  • ctrlp

    let g:ctrlp_custom_ignore = {
    \ 'dir': '\.git$\|public$\|log$\|tmp$\|vendor$',
    \ 'file': '\v\.(exe|so|dll)$'
    \ }
    
  • youcompleteme 설치 방법 및 설정 내용

참조: [neverapple88의 블로그]

youcompleteme의 경우 플러그인 설치 뿐만 아니라 따로 컴파일 작업을 해주어야만 동작한다고 한다. 해당 컴파일을 수행하기 위한 패키지들을 설치.

$ sudo apt install build-essential cmake python-dev python3-dev clang

# 만일 C#을 지원하고자 한다면 `mono-devel`도 설치해야 한다.
$ sudo apt install mono-devel

# 2. Vundle을 이용한 플러그인들의 설치 과정을 진행 했다면, youcompleteme 플러그인 경로로 이동하여 서브모듈을 업데이트 한다.

$ cd ~/.vim/bundle/youcompleteme
$ git submodule update --init --recursive

이제 다음 과정으로, ~/.vim/bundle/youcompleteme 경로상에서 소스를 컴파일

$ ./install.py --clang-completer

C/C++ 스타일을 지원하기 위한 내용, --clang-completer옵션 외에도 32bit 버전에서의 컴파일을 위한 옵션 --system-libclang외에도 C# 지원을 위한 --omnisharp-complete 옵션 설정등이 있다.

여기까지, youcompleteme를 위한 설치 과정은 완료 되었으며, 다음으로 설정 부분에 대해 알아보자.

  • .vimrc에서 youcompleteme 옵션 설정
let g:ycm_global_ycm_extra_conf = '~/.vim/.ycm_extra_conf.py'    " 첨부파일을 다운받아 위치 시킨 경로를 적어 준다.
let g:ycm_confirm_extra_conf = 0
let g:ycm_key_list_select_completion = ['', '']
let g:ycm_key_list_previous_completion = ['', '']
let g:ycm_autoclose_preview_window_after_completion = 1
let g:ycm_warning_symbol = '>*'
let g:ycm_show_diagnostics_ui = 0
let g:ycm_server_python_interpreter = '/usr/bin/python3'
let g:ycm_seed_identifiers_with_syntax = 1
let g:ycm_python_binary_path = '/usr/bin/python3'
let g:ycm_collect_identifiers_from_tags_files = 0

" nnoremap g :YcmCompleter GoTo
" nnoremap gg :YcmCompleter GoToImprecise
" nnoremap d :YcmCompleter GoToDeclaration
" nnoremap t :YcmCompleter GetType
" nnoremap p :YcmCompleter GetParent
  • 표준 라이브러리에 대한 경로 추가
    $ echo | g++ -std=c++11 -v -E -x c++ -                      " g++를 사용할 경우
    $ echo | clang -std=c++11 -stdlib=libc++ -v -E -x c++ -        " clang을 사용할 경우
    

위 처럼 각각의 사용하고자 하는 compiler에 대한 조회를 했을 때,
#include "..." search starts here:#include <...> search starts here: 부터, End of search list. 사이에 있는 경로 정보들을 .ycm_extra_conf.pyflags 옵션 란안에 기존 다른 경로 값들이 위치 하고 있던 곳에 추가해주면 표준 라이브러리에 대한 함수나 클래스들의 목록도 볼 수 있게 된다.

# 추가 예시
(생략...)
'-isystem',
'cpp/BoostParts',
'-isystem',
'/usr/include/c++/7',
'-isystme',
'/usr/include/x86_64-linux-gnu/c++/7',
'-isystme',
'/usr/include/c++/7/backward',
'-isystme',
'/usr/lib/gcc/x86_64-linux-gnu/7/include',
'-isystme',
'/usr/local/include',
'-isystme',
'/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed',
'-isystme',
'/usr/include/x86_64-linux-gnu',
'-isystme',
'/usr/include',
get_python_inc(),
'-isystem',
(생략...)


블로그 이미지

나오K

,