การตั้งค่าที่แนะนำสำหรับสภาพแวดล้อมการเขียนโปรแกรมแบบข้อความที่มีน้ำหนักเบาเป็นพิเศษใน linux


14

ฉันกำลังมองหาคำแนะนำสำหรับการตั้งค่าสำหรับความต้องการเฉพาะของฉัน ฉันไม่ได้ทำลินุกซ์มามากตั้งแต่เรียนจบและอยากกลับมาเป็นงานอดิเรก ฉันมีฮาร์ดแวร์ที่ไม่แรงเกินไป (RAM 512 MB, single core) ฉันต้องการทำทุกอย่างผ่านเชลล์และโปรแกรมแก้ไขข้อความเช่นเสียงเรียกเข้า เป้าหมายของฉันคือไม่เคยแตะเมาส์

ฉันต้องการความสามารถในการเปิดเชลล์หลาย ๆ ตัวพร้อมกันหนึ่งตัวกำลังเรียกใช้เว็บเซิร์ฟเวอร์หนึ่งที่เรียกใช้เป็นกลุ่มเรียกใช้แอปพลิเคชันของฉันสร้างไปป์ไลน์และอีกหนึ่งคำสั่งสำหรับ ad-hoc เชลล์คำสั่งเช่น wget grepping และ untarring เป็นต้น สามารถเปิดเชลล์ใหม่และสลับระหว่างเชลล์ได้อย่างรวดเร็วด้วยคีย์บอร์ด

แต่ถึงแม้ว่าฉันต้องการเชลล์หลายตัว แต่ฉันไม่ต้องการสภาพแวดล้อมเดสก์ทอปแบบกราฟิก ฉันไม่ต้องการถูกล่อลวงให้ใช้เมาส์ ส่วนหนึ่งของจุดประสงค์ของฉันคือการบังคับตัวเองให้เรียนรู้วิธีใช้บรรทัดคำสั่งในการทำงานต่างๆ

ฉันยังต้องการที่จะใช้ประโยชน์จากจอภาพขนาดใหญ่ของฉันโดยใช้เสียงเรียกเข้าพร้อมกับคอลัมน์สองร้อยคอลัมน์ที่ลดลง

เป็นไปได้ไหม


1
ลองดูdvtm ... คุณสามารถรวมมันเข้ากับ tmux หรือหน้าจอได้
jasonwryan

1
คำถามนี้อาจเหมาะสมกว่าในชุมชนของ wiki
jw013

คำตอบ:


5

ฉันอ่านคำถามของคุณหลายครั้งก่อนที่ฉันจะรู้ว่าฉันมีคำแนะนำสำหรับคุณ: vim with tmux: http://tmux.sourceforge.net/

tmux เป็นหน้าจอ 'มัลติเพล็กเซอร์' ที่ให้คุณมีหลายหน้าต่างและบานหน้าต่าง 'ภายใน 1'

มันเป็นตัวตายตัวแทนของโปรแกรม 'หน้าจอ' ที่น่านับถือซึ่งเป็นแก่นของนักเขียนโค้ด cli จำนวนมาก หนึ่งในคุณสมบัติการชนะดั้งเดิมของกลุ่มคือความสามารถในการแยกหน้าต่างในแนวตั้งและแนวนอน อย่างไรก็ตามหน้าจอก็เดินไปข้างหน้าและสามารถทำได้เช่นกัน

ตัวอย่าง:

ป้อนคำอธิบายรูปภาพที่นี่

อีกส่วนหนึ่งของการตั้งค่าที่ฉันอยากจะแนะนำคือชื่อแทนที่ดี สิ่งเหล่านี้จะทำให้การพิมพ์และการโต้ตอบของคุณง่ายขึ้นและเร็วขึ้น

ตัวอย่างรายการโปรดของฉันแสดงที่นี่เป็นตัวอย่าง:

alias gcv='git commit'
alias gg='git grep ' # for searching (add parameter)
alias gst='git status -sb' # I must use this 100 times a day!!!
alias h='history | tail'
alias hg='history | grep' # for searching my history (add parameter)
alias l='ls -alFtrG'
alias ls='ls --color=auto'
alias mv='mv -i'
alias p='pwd'# at least 200 times a day! so 2 chrs saved * 200 = 400 less characters to type ;)

นามแฝงสามารถตั้งค่าในไฟล์. bash_aliases ที่ถูกเรียกจาก. bashrc ด้วย: นิยาม # Alias หาก [-f ~ / .bash_aliases]; จากนั้น ~ / .bash_aliases fi

โอกาสที่คุณจะมีรหัสนั้นอยู่แล้วดังนั้นแค่ไฟล์. bash_aliases ของคุณเอง

ตัวเลือกทั้งสองนี้ทำงานบน Mac และนั่นเป็นข้อพิจารณาที่สำคัญสำหรับตัวฉันเอง

คนส่วนใหญ่ที่ใช้ tmux ทำการแมปกุญแจเพื่อทำให้ง่ายขึ้น การผูกค่าเริ่มต้นนั้นไม่ค่อยดีเท่าไหร่ นี่คือการตั้งค่าของฉัน:

$ cat ~ / tmux.conf

# mdd tmux settings
bind r source-file ~/.tmux.conf \; display "Reloaded!"  # Reload with ctrl-r
set -g prefix C-a         # prefix from ctrl-b to ctrl-a
unbind C-b                # allow ctrl-b for other things
set -sg escape-time 1     # quicker responses
bind C-a send-prefix      # Pass on ctrl-a for other apps
set -g base-index 1        # Numbering of windows
setw -g pane-base-index 1  # Numbering of Panes
# bind | split-window -h    # Split panes horizontal
bind \ split-window -h    # Split panes horizontal
bind - split-window -v    # Split panes vertically
bind h select-pane -L     # Switch to Pane Left
bind j select-pane -D     # Switch to Pane Down
bind k select-pane -U     # Switch to Pane Up
bind l select-pane -R     # Switch to Pane Right
bind -r C-h select-window -t :-  # Quick Pane Selection
bind -r C-l select-window -t :+  # Quick Pane Selection
bind -r H resize-pane -L 5       # Switch to Pane Left
bind -r J resize-pane -D 5       # Switch to Pane Down
bind -r K resize-pane -U 5       # Switch to Pane Up
bind -r L resize-pane -R 5       # Switch to Pane Right
setw -g mode-mouse off           # Mouse Off
set -g mouse-select-pane off     # Mouse Off  
set -g mouse-resize-pane off     # Mouse Off
set -g mouse-select-window off   # Mouse Off
#set -g  default-terminal "screen-256color"
setw -g monitor-activity on      # Activity Alerts
set -g visual-activity on
set -g status-fg white           # Status line Colors
set -g status-bg black
setw -g window-status-fg cyan    # Window list color
setw -g window-status-bg default
setw -g window-status-attr dim
setw -g window-status-current-fg white     # Active Window Color
setw -g window-status-current-bg red
setw -g window-status-current-attr bright
set -g pane-border-fg green      # Pane colors
set -g pane-border-bg black 
set -g pane-active-border-fg white 
set -g pane-active-border-bg yellow
set -g message-fg white          # Command/Message Line.
set -g message-bg black
set -g message-attr bright
set -g status-left-length 40     # Status Line, left side
set -g status-left "#[fg=white]Session: #S #[fg=yellow]#I #[fg=cyan]#P"
set -g status-utf8 on            # Status Line, right side
set -g status-right "-------"
set -g status-interval 60        # frequency of status line updates
set -g status-justify centre     # center window list
setw -g mode-keys vi             # vi keys to move 
unbind v                         # Open panes in same directory as tmux-panes script
unbind n
bind v send-keys " ~/tmux-panes -h" C-m
bind n send-keys " ~/tmux-panes -v" C-m
unbind Up                        # Maximizing and Minimizing...
bind Up new-window -d -n tmp \; swap-pane -s tmp.1 \; select-window -t tmp
unbind Down
bind Down last-window \; swap-pane -s tmp.1 \; kill-window -t tmp
bind P pipe-pane -o "cat >>~/#W.log" \; display "Toggled logging to ~/#W.log"
# Make keys for copy mode be like vi
unbind [
bind Escape copy-mode
unbind p
bind p paste-buffer
bind -t vi-copy 'v' begin-selection
bind -t vi-copy 'y' copy-selection

ในที่สุด (เพื่อปิดลูป) นี่คือการตั้งค่า. vimrc ของฉันเองที่ฉันต้องการทำให้เชลล์ใช้งานง่ายขึ้น:

" mdd specific stuff --- start
set hlsearch
set incsearch
set number
" more3 mdd stuff - set tabs to be spaces and length of 2 characters.
set smartindent
set tabstop=2
set shiftwidth=2
set expandtab
" mdd specific stuff --- end
"
" Forget being compatible with good ol' vi
set nocompatible

" Get that filetype stuff happening
filetype on
filetype plugin on
filetype indent on

" Turn on that syntax highlighting
syntax on

" Why is this not a default
set hidden

" Don't update the display while executing macros
set lazyredraw

" At least let yourself know what mode you're in
set showmode

" Enable enhanced command-line completion. Presumes you have compiled
" with +wildmenu.  See :help 'wildmenu'
set wildmenu

" Let's make it easy to edit this file (mnemonic for the key sequence is
" 'e'dit 'v'imrc)
nmap <silent> ,ev :e $MYVIMRC<cr>

" And to source this file as well (mnemonic for the key sequence is
" 's'ource 'v'imrc)
nmap <silent> ,sv :so $MYVIMRC<cr>

highlight ExtraWhitespace ctermbg=red guibg=red
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()

ในที่สุดฉันก็ทำการเปลี่ยนแปลงเล็กน้อยในไฟล์. bashrc ของฉันตัวอย่างเช่นshopt -s autocdเมื่อฉันพิมพ์ชื่อไดเรกทอรี (ที่มีอยู่) เชลล์ซีดีของฉันลงในไดเรกทอรีนั้นทันที Nifty! ดังนั้นนี่คือการเปลี่ยนแปลง. bashrc ของฉัน:

# Automatic cd'ing
shopt -s autocd

# Have cd show directory info ('cos my shell doesn't show full directory path in $PS1 prompt (intended).
cd() {
      builtin cd "$@" && pwd 
  }

# enable programmable completion features
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi

PATH=$PATH:$HOME/.rvm/bin # Add RVM to PATH for scripting
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"  # Load RVM into a shell session *as a function*

# mdd Terminal Multiplexor 6/15/2012
if [[ ! $TERM =~ screen ]]; then
    exec tmux
fi

[ -z "$TMUX" ] && export TERM=xterm-256color

export EDITOR=vim

git config --global --add color.ui true

คำตอบอย่างละเอียดดี ตอนนี้ฉันใช้ tmux เป็นเวลาหนึ่งปี (และ vi / vim ประมาณ 25 ปี) แต่ฉันเลือกบางอย่างที่นี่
Dan

ยอดเยี่ยมคำตอบที่ดีสำหรับ noob อย่างฉัน เกี่ยวกับสิ่งเดียวที่ขาดหายไปคือปลั๊กอินของกลุ่มที่คุณใช้ ... แต่นั่นเป็นอีกคำถามหนึ่งสำหรับวันอื่น :) ขอบคุณอีกครั้ง ... ถึงแม้ว่ามันจะพาฉันไปตลอดกาลเพื่อที่จะผ่านมันไปและลองทุกอย่างออกไป
Kevin Pauli

แน่นอนฉันคิดว่าฉันไม่ได้ใช้ปลั๊กอินใด ๆ แต่ฉันรู้ว่ามีให้เลือกมากมายรวมถึงบางส่วนสำหรับพื้นที่ทับทิมของฉันบนราง
Michael Durrant

2
สิ่งที่คุณพูดในที่นี้อาจมีประโยชน์ แต่สิ่งหนึ่งที่ปิด: เสียงเรียกเข้าสามารถแบ่งบานหน้าต่างทั้งในแนวตั้งและแนวนอนได้
dubiousjim

1
อัปเดตเพื่อให้ทราบว่าหน้าจอสามารถแยกแนวนอนและแนวตั้งได้ในขณะนี้
Michael Durrant

6

ฉันใช้ XMonad + tmux + Emacs สำหรับการตั้งค่าที่คล้ายกัน

ฉันเคยใช้ ratpoison มาหนึ่งปีแล้ว แต่ XMonad รู้สึกแข็งแกร่งขึ้น ฉันไม่เคยมีปัญหาใด ๆ ในกล่อง 256MB, 512MB ด้วย Ratpoison มีปัญหาด้านความมั่นคง แต่นี่เป็นข้อมูลเล็ก ๆ น้อย ๆ และสิ่งต่าง ๆ อาจเปลี่ยนแปลงไปนับ แต่นั้น

ฉันยังใช้หน้าจอ GNU แต่ tmux มีคุณสมบัติบางอย่างที่หน้าจอไม่ได้

หากคุณรู้เป็นกลุ่มอยู่แล้วคุณไม่ควรเรียนรู้เครื่องมือใหม่ หากคุณทำไม่ได้ Emacs สามารถใช้เชลล์หลายตัว ( C-u M-x shell) ใช้เชลล์ที่คุณชื่นชอบ ( M-x term) คุณสามารถเขียนคอมไพล์และดีบักโปรแกรมอ่านอีเมลของคุณแฮงเอาท์ใน IRC อ่านหน้าเว็บ / ข้อมูล / man รัน REPL ส่วนใหญ่ เชลล์ (เช่นM-x run-python), ใช้ git / hg / svn ข้างใน, แก้ไขไฟล์รีโมตด้วย TRAMP, ใช้ dired เพื่อทำการไฟล์เกือบทั้งหมด, ใช้ grep / find / ack ข้างใน. คุณสามารถใช้ Emacs ด้วยหรือไม่ใช้ X คุณไม่ต้องการเทอร์มินัลมัลติเพล็กเซอร์เช่นหน้าจอหรือ tmux แต่ฉันชอบเรียกใช้ emacs เป็นเซิร์ฟเวอร์และใช้ emacsclient จาก tmux ถ้าใช้จากเชลล์


ฉันอยากจะแนะนำให้ใช้ terminator! แต่มันเป็นทางเลือกที่หมดจด!
ปราณีบเบาวา

3
  • โซลูชันที่ไม่มี X เลย: framebuffer + Linux console + หน้าจอ GNU + vim + w3m
  • วิธีแก้ปัญหาด้วย X แต่ไม่มีสภาพแวดล้อมของเดสก์ท็อป: dwm + urxvt + หน้าจอ GNU + vim + w3m + surf

dwm ใช้หน่วยความจำเพียงไม่กี่ร้อย kB ขับเคลื่อนด้วยแป้นพิมพ์ แต่คุณสามารถใช้เมาส์ได้ถ้าต้องการ ตรวจสอบhttp://suckless.orgสำหรับเครื่องมือที่เรียบง่าย แต่ทรงพลัง


2

สำหรับเชลล์หลายตัวที่มีการนำทางด้วยแป้นพิมพ์อย่างง่ายระหว่างเหล่านั้นคุณอาจต้องการดูในหน้าจอ GNUหรือbyobu (ซึ่งเป็นการปรับปรุงให้ดีขึ้น)


2

ฉันพยายามใช้ความพยายามที่คล้ายกันสองสามเดือนที่ผ่านมาทิ้งเมาส์ของฉันและสำรวจการตั้งค่าที่หลากหลายและผู้จัดการหน้าต่าง ดูเหมือนว่าคุณได้รับข้อเสนอแนะที่เป็นประโยชน์มากมาย แต่ฉันคิดว่ามีค่าใช้จ่ายเพิ่มอีกสักสองสามสตางค์ นี่คือสองของฉัน:

ลองดูที่ตัวจัดการหน้าต่าง i3 มันเบาด้วยการกำหนดค่าอย่างง่ายและไม่จำเป็นต้องคอมไพล์ใหม่หลังจากเปลี่ยนการตั้งค่า ฟังก์ชั่นการปูกระเบื้องและพื้นที่ทำงานที่ติดแท็กหมายความว่าไม่มีความเป็นไปได้ที่จะไม่มีเมาส์และไม่มีที่สิ้นสุดตามการตั้งค่าและพื้นที่หน้าจอ สามารถกำหนดโปรแกรมให้กับแท็กและคีย์สามารถผูกกับอะไรก็ได้ i3status หรือ conky นั้นสามารถส่งไปยัง i3 เพื่อดูข้อมูลระบบได้อย่างง่ายดาย ติดตั้ง dmenu และถอดปลั๊กเมาส์

ลอง distro แสง Arch, Gentoo และ Slackware มีตัวเลือกที่แตกต่างกันสำหรับการตั้งค่าสภาพแวดล้อมที่มีแสง เริ่มต้นเล็ก ๆ และใส่ใจกับการพึ่งพา ติดตั้งเฉพาะสิ่งที่คุณต้องการและเรียนรู้วิธีกำหนดค่าอย่างเหมาะสม อย่าเริ่ม X เมื่อบู๊ต เรียนรู้การใช้เครื่องมือทั้งหมดด้วยค่าใช้จ่ายของคุณ เป็นกลุ่มสัตว์ร้าย ถ้าคุณรู้แล้วใช้มัน ถ้าไม่เรียนรู้มัน ใส่ใจกับรายละเอียด เรียนรู้สิ่งที่คุณมีในระบบของคุณและทำไมมันมี


วิธีที่สอง "วิธีการกลั่นแสง" มันบังคับให้คุณทำให้มือของคุณสกปรกแม้ว่าพวกเขาจะวางมันไว้สำหรับคุณโดยการออกคำสั่ง ( คู่มือการติดตั้ง Gentooนั้นยอดเยี่ยม) เพราะทุกระบบแตกต่างกัน การติดตั้งครั้งแรกไม่ได้ให้ X กับคุณดังนั้นคุณติดอยู่ที่บรรทัดคำสั่ง
ND Geek

1

ฉันมีความปรารถนาคล้ายกันเมื่อประมาณหกเดือนที่แล้ว ส่วนใหญ่เป็นเพราะฉันทำงานผ่าน SSH ทั้งวัน ตามที่แนะนำไว้แล้วใช้หน้าจอ GNU มันค่อนข้างน่ากลัว (IMHO) ตรงหลังจากติดตั้ง แต่! มันสามารถปรับแต่งได้อย่างมากผ่านไฟล์. screenrc มีบทเรียนออนไลน์มากมายที่ให้รหัสคุณสามารถตัดและวางเพื่อให้ได้ตามที่คุณต้องการ

ฉันไปจนถึงการรวบรวมสคริปต์บางอย่างสำหรับการตั้งค่าสภาพแวดล้อม - MALiCE - 'My Awesome Linux Coding Environment' มันมีอยู่ใน Github ที่นี่:

การปองร้าย

นอกจากนี้ยังมีเอกสารแป้นพิมพ์ลัดจำนวนมากรวมถึงไฟล์. mtrtrc และ. screenrc ตัวอย่าง - ซึ่งมีการตั้งค่าให้ทำงานกับสิ่งต่าง ๆ เช่น gmail

โปรดทราบว่ามันไม่สมบูรณ์ แต่อาจช่วยคุณประหยัดเวลาและความพยายามในการดูไฟล์ปรับแต่งและสคริปต์บางอย่าง มีอคติที่แข็งแกร่ง

ฉันขอแนะนำโปรแกรมเช่น cmus (โปรแกรมเล่นสื่อข้อความ - ดีมาก) และ mutt (ไคลเอนต์อีเมล - กำหนดค่าอีกครั้งผ่านไฟล์ข้อความ. mtrtrc) นอกจากนี้ยังมีไคลเอนต์ IRC แบบข้อความและเชื่อหรือไม่ถอดรหัสวิดีโอแบบข้อความซึ่งจะเปลี่ยนวิดีโอเป็น ASCII - สุดขีด แต่แต่ละตัวเป็นของตัวเอง

หากคุณไม่ต้องการเดสก์ท็อปเลยมีตัวเลือกมากมาย ตัวอย่างเช่นคุณสามารถติดตั้ง slackware ซึ่งถ้าฉันจำได้อย่างถูกต้องบูทไปยังอินเตอร์เฟสบรรทัดคำสั่ง คุณต้องออกนอกเส้นทางของคุณเพื่อเริ่ม GUI


เราสามารถเพิ่มelinksเว็บเบราว์เซอร์ให้กับรายการสาธารณูปโภคที่เป็นข้อความที่ดี
Stéphane Chazelas

มันเปรียบเทียบกับเว็บเบราว์เซอร์อื่นที่เป็นข้อความหรือไม่ ฉันไม่เคยชินกับการท่องเว็บจาก command-line: p


0

กุญแจสำคัญในการนี้ไม่ได้กระจาย แต่เครื่องมือ เพียงแค่หยุดการใช้เครื่องมือ GUI และปรับแต่งเครื่องมือ CLI เพื่อค้นหาและทำงานตามที่คุณต้องการ วิธีหนึ่งคือการแก้ไข~/.Xresourcesแล้วโหลดมันด้วยในxrdb ~/.xinitrcคุณสามารถเริ่มแอปพลิเคชั่นที่คุณใช้งานอยู่เสมอ

เห็นได้ชัดว่าคุณต้องการเปลือกที่ดี: ฉันจะบอกว่า zsh ~/.zshrcคุณจะต้องทำงานอย่างกว้างขวางใน (แต่ทุบตีจะทำงานด้วยแน่นอนจากนั้น~/.bashrcจะเป็นสถานที่)

ประการที่สองการแก้ไข Emacs หรือเป็นกลุ่มขึ้นอยู่กับที่คุณใช้ในปัจจุบัน เครื่องมือแก้ไขขั้นสูงที่น้อยกว่า (เช่น nano) จะไม่ทำเช่นนั้น เช่นเดียวกับเชลล์คุณต้องทำงานหนักมาก~/.emacsหรือไฟล์ init ที่เกี่ยวข้อง

คุณต้องรวมมากที่สุดเท่าที่จะทำได้ในโปรแกรมแก้ไขข้อความ ฉันจะให้ตัวอย่างจากโลกของ Emacs เพียงเพราะฉันเป็นผู้ใช้ของ Emacs สำหรับจดหมาย rmail สำหรับการจัดการไฟล์ dired สำหรับการท่องเว็บ W3M สำหรับข่าว gnus (แม้ว่าฉันจะไม่ใช้มัน) M-x manสำหรับหน้ามนุษย์ และอื่น ๆ

เหตุผลที่คุณทำเช่นนี้และไม่ใช้แอปพลิเคชั่น CLI อื่น ๆ (เช่นmanสำหรับ man pages, lynx สำหรับการเรียกดูและอื่น ๆ ) คือ:

1) ระดับการรวม (ฆ่างัดทำปุ่มลัดทุกอย่างในพริบตา ... )

2) แป้นพิมพ์ลัดสำหรับการนำทางเคอร์เซอร์ค้นหา ฯลฯ (เช่นหน่วยความจำกล้ามเนื้อของคุณ)

สำหรับ X คุณไม่จำเป็นต้องละทิ้งมัน เพียงเพราะคุณต้องการทุกอย่างใน CLI ไม่ได้หมายความว่าคุณไม่ต้องการ GFX เลย (หรือ - อย่างน้อยที่สุดฉันต้องการ CLI-only และ GFX) ตัวอย่างเช่นแม้ว่าคุณจะแก้ไขรูปภาพด้วย (CLI) mogrify หรือแปลง แต่คุณยังต้องการแสดงผลเพื่อตรวจสอบผลลัพธ์ (ตัวอย่างเช่นใน gliv เพียงปิดใช้งานแถบเมนูเพื่อไม่ให้ใช้เมาส์) อีกตัวอย่างคือเอกสาร LaTeX และ PDF

สำหรับเทอร์มินัลคนส่วนใหญ่จะพูดถึงหน้าจอหรือ tmux แต่คุณสามารถใช้เทอร์มินัลเสมือน Linux (คอนโซลหรือ ttys) ใน X urxvt มีส่วนขยาย Perl ที่เปิดใช้งานแท็บ สำหรับสิ่งเหล่านั้น (ttys และ urxvt) คุณสามารถตั้งค่าอินเทอร์เฟซเหมือนกันตัวอย่างเช่น Alt-J / K เพื่อสลับระหว่างแท็บดังนั้นคุณไม่จำเป็นต้องเข้าถึงปุ่มลูกศร (หรืออะไรก็ตามที่เป็นค่าเริ่มต้น)

ขอให้โชคดี :) อย่าลังเลที่จะส่งจดหมายถึงคุณเมื่อคุณทำเสร็จ (หรือเกือบจะ ... คุณไม่เคยทำ) เพราะฉันอยู่ในเส้นทางเดียวกันกับคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.