亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

cua:一個(gè)命令行文本片段管理小工具的設(shè)計(jì)與實(shí)現(xiàn)

cua:一個(gè)命令行文本片段管理小工具的設(shè)計(jì)與實(shí)現(xiàn) cua 是我最近做的命令行小工具名字來自我敲鍵盤時(shí)冒出來的第一感覺——短、響、干脆像有人把抽屜拉開又合上的那一聲。它解決的問題很小但特別煩人代碼里那些反復(fù)出現(xiàn)的片段為什么每次都要重新去翻數(shù)據(jù)庫連接串、正則表達(dá)式、部署命令、git 提交信息模板這些內(nèi)容我明明存過卻經(jīng)常要花幾十分鐘重新搜索一遍。于是我用一個(gè)周末寫了 cua專門做一件事把常用的文本片段快速存下來再更快地復(fù)制回去。這篇文章記錄需求、設(shè)計(jì)、實(shí)現(xiàn)和踩坑的完整過程關(guān)鍵代碼和取舍理由都放在下面。如果你也想給自己做一個(gè)十分鐘能跑通的效率工具可以拿它當(dāng)參考。1. 為什么我會(huì)被一個(gè)三字母命令套牢開局痛點(diǎn)與命名由來1.1 這個(gè)場(chǎng)景你們多半也遇到過大概在半年多前我接到一個(gè)維護(hù)老服務(wù)的活兒。那次排查問題需要在服務(wù)器上拼一串參數(shù)復(fù)雜的啟動(dòng)命令里面包含數(shù)據(jù)庫地址、緩存節(jié)點(diǎn)、日志路徑還有一個(gè)帶轉(zhuǎn)義的正則表達(dá)式。我先是在搜索引擎里搜了一圈看到好幾篇互相矛盾的文檔又去翻自己本地那個(gè)叫 snippets.md 的筆記文件文件已經(jīng)積累了上百條內(nèi)容CtrlF 翻了幾輪才找到一段半年前的記錄復(fù)制粘貼之后發(fā)現(xiàn)里面還混著行號(hào)和多余的換行導(dǎo)致命令直接執(zhí)行失敗。那一刻我就意識(shí)到問題不在于我懶而在于“存”和“取”這兩個(gè)動(dòng)作被嚴(yán)重割裂。筆記軟件適合寫長文章不適合放零散代碼片段聊天記錄里的代碼可以用但前提是你還能記得是哪一天、哪個(gè)群新建文檔就更不現(xiàn)實(shí)我總不能為了存一個(gè)正則表達(dá)式新建一個(gè)頁面。我想要的是這樣一類工具操作足夠快快到可以讓我愿意為一條三行代碼付出哪怕五秒鐘的保存時(shí)間查找足夠快快到讓我不再依賴瀏覽器的搜索歷史。后來我嘗試過幾個(gè)現(xiàn)成的片段管理軟件要么太重要裝客戶端、賬號(hào)、同步服務(wù)要么太輕只是把所有的文本塞進(jìn)一個(gè)大文件連最基本的按名稱搜索都做不好。于是我開始認(rèn)真考慮自己寫一個(gè)。核心需求其實(shí)就三條第一能用命令行直接操作因?yàn)閷懘a的時(shí)候我已經(jīng)在終端里了第二數(shù)據(jù)必須是我能看懂的文件不能是某個(gè)私有格式的數(shù)據(jù)庫第三復(fù)制結(jié)果要進(jìn)系統(tǒng)剪貼板而不是讓我再手動(dòng)選中一遍。1.2 cua 這個(gè)名字是怎么來的項(xiàng)目一開始的代號(hào)是 “snippet-cli”名字太長打起來也累在終端里敲了兩天就覺得煩。有一天我在想這個(gè)工具的核心動(dòng)作其實(shí)就是“把片段從口袋里掏出來”那一瞬間腦子里蹦出一個(gè)擬聲詞 cua像抽屜開關(guān)的聲音也像按鍵按下的聲音。我試著在終端里敲了三個(gè)字母確認(rèn)手感和節(jié)奏都好就決定用它。當(dāng)然為了在跟同事介紹時(shí)不至于被追問“cua 到底是什么意思”我后來湊了一個(gè)還算能講得通的展開Clipboard Utility for All即面向所有人的剪貼板工具。但說實(shí)話這個(gè)名字是事后硬湊的真正的原因就是短、好記、不容易撞名。在項(xiàng)目啟動(dòng)前我特意執(zhí)行了一下which cua確認(rèn)系統(tǒng)里沒有同名命令然后就把這個(gè)名字焊死了。這里也提個(gè)建議給工具取名一定要先查一次命令是否被占用避免安裝到你電腦上時(shí)和系統(tǒng)里的程序沖突。1.3 邊界它不做什么cua 的定位不是筆記軟件也不是密碼管理器更不是 TODO 管理。它的邊界非常清楚只處理純文本片段不做富文本不搞標(biāo)簽系統(tǒng)不為每個(gè)片段維護(hù)標(biāo)題、作者、創(chuàng)建時(shí)間這些元數(shù)據(jù)。原因也很直接任何額外的概念都會(huì)增加使用者的決策成本。筆記軟件要你思考該建哪個(gè)筆記本、打哪些標(biāo)簽而 cua 把決策壓縮為一步給你想存的內(nèi)容起一個(gè)文件名字存進(jìn)去完事。我見過不少同類項(xiàng)目最后變得難用都是因?yàn)楣δ茉郊釉蕉嘀С至藞D片、支持了 Markdown 渲染、支持了團(tuán)隊(duì)共享結(jié)果用戶存一個(gè)片段要考慮的事情比寫代碼本身還多。所以我在寫 cua 的時(shí)候給自己立了一條規(guī)矩任何功能如果不能在我按下回車之后的五秒鐘內(nèi)感受到價(jià)值就先不做。后面所有的實(shí)現(xiàn)包括存儲(chǔ)、匹配、復(fù)制全都是圍繞這條規(guī)矩展開的。2. 片段即文件cua 的存儲(chǔ)模型與設(shè)計(jì)取舍2.1 為什么不選數(shù)據(jù)庫一個(gè)“偷懶”的決策最開始我以為該用 SQLite畢竟片段管理天然適合結(jié)構(gòu)化存儲(chǔ)可以做標(biāo)簽、做全文索引、統(tǒng)計(jì)使用頻率。但仔細(xì)想了一圈之后我放棄了數(shù)據(jù)庫回到最原始的方式每個(gè)片段就是一個(gè)獨(dú)立的純文本文件。這個(gè)決策看起來“偷懶”實(shí)際算下來是最省事的方案。原因有幾點(diǎn)。首先是規(guī)模一個(gè)普通開發(fā)者的常用片段撐死也就幾百條這個(gè)規(guī)模用文件系統(tǒng)完全沒壓力根本不需要數(shù)據(jù)庫的索引能力。其次是可遷移性文本文件放哪兒都認(rèn)得用 U 盤拷走、用專門工具同步、甚至是打包發(fā)到另一臺(tái)機(jī)器都不會(huì)遇到格式問題。第三是生態(tài)文件存好之后我可以用 ripgrep、grep、find、編輯器自帶的全局搜索去翻它們這意味著 cua 哪怕有一天本身掛了我的數(shù)據(jù)也永遠(yuǎn)可以用基礎(chǔ)工具讀到。對(duì)比項(xiàng)純文本文件SQLite 數(shù)據(jù)庫初始化成本零一個(gè)目錄搞定需要建表、寫連接邏輯備份/版本管理git、壓縮包均可需要導(dǎo)出為其他格式檢索能力依賴文件名和全文掃描自帶索引適合超大片段庫查看便利性任何編輯器都能直接看需要命令行或圖形工具適用規(guī)模幾百條以內(nèi)上萬條、需要復(fù)雜查詢時(shí)后來實(shí)際跑起來也證明這個(gè)選擇帶來的額外紅利是我可以很方便地在片段目錄里執(zhí)行g(shù)it init把整個(gè)片段庫納入版本管理。這樣即使某一次批量修改出了問題也能回滾到上一份快照。如果你準(zhǔn)備做類似的工具我的建議是不要急著引入數(shù)據(jù)庫先想想你的數(shù)據(jù)規(guī)模到底有多大。2.2 文件名即標(biāo)簽cua 的片段存儲(chǔ)目錄默認(rèn)是~/.cua/snippets/里面允許再建一層子目錄作為分類。我的實(shí)際目錄結(jié)構(gòu)長這樣~/.cua/ snippets/ deploy/ docker-compose-postgres.yml nginx-ssl-conf.txt python/ regex-uuid.txt sqlalchemy-async-session.txt misc/ ssh-tunnel.txt config.toml每個(gè)文件的文件名就是它的標(biāo)簽。文件名的格式我強(qiáng)制推薦用 kebab-case也就是全小寫、單詞之間用短橫線連接例如docker-compose-postgres.yml。為什么不用空格或下劃線因?yàn)榭崭裨诮K端世界里會(huì)帶來無窮無盡的引號(hào)問題下劃線在模糊匹配時(shí)又不如短橫線容易拆詞。cua 在add的時(shí)候會(huì)自動(dòng)把用戶輸入的名稱做規(guī)范化處理空格、大寫、特殊符號(hào)都會(huì)被轉(zhuǎn)成短橫線這樣我手動(dòng)創(chuàng)建的片段無論多隨意最終落到磁盤上的文件名一定符合規(guī)則。分類目錄我控制在兩層以內(nèi)一層是分類名一層是文件名。層級(jí)做得越深使用者的心理負(fù)擔(dān)就越重最后的結(jié)果往往是懶得分類、把東西亂丟。如果你只有幾十個(gè)片段我建議干脆連分類目錄都省略全部平鋪在 snippets 目錄下靠文件名把含義表達(dá)清楚就夠了。2.3 片段內(nèi)容的格式約定片段的正文就是純文本。不過為了在列表展示和實(shí)際復(fù)制之間做區(qū)分我約定了一個(gè)非常輕量的規(guī)則如果文件的第一行以#開頭那么這一行被視為描述信息在list命令里顯示但不會(huì)被復(fù)制到剪貼板。比如一個(gè) shell 配置片段# 生成安全的隨機(jī)令牌 openssl rand -base64 32當(dāng)cua list展示時(shí)你會(huì)看到一行“生成安全的隨機(jī)令牌”這時(shí)你一眼就知道這段內(nèi)容是干嘛的當(dāng)cua copy執(zhí)行時(shí)它只會(huì)復(fù)制第二行的實(shí)際命令描述行會(huì)被自動(dòng)剝離。如果某個(gè)片段本身就是一段以#開頭的代碼比如 Python 注釋、Shell 注釋那它也只會(huì)影響列表顯示不影響復(fù)制結(jié)果因?yàn)閺?fù)制時(shí)剝離規(guī)則只判斷第一行。實(shí)際上這個(gè)小約定是我在寫筆記時(shí)順手加上的。早期版本會(huì)把描述和正文一起復(fù)制進(jìn)剪貼板結(jié)果我粘貼到終端里總要多刪一行非常惱火。后來加了剝離邏輯這個(gè)問題就徹底消失了。你也可以理解為cua 把每個(gè)片段文件都當(dāng)成一個(gè)極簡(jiǎn)的“標(biāo)題正文”結(jié)構(gòu)標(biāo)題來自文件名描述來自第一行注釋剩下的全是內(nèi)容。3. 從 stdin 到剪貼板的完整鏈路核心命令與關(guān)鍵實(shí)現(xiàn)3.1 存儲(chǔ)目錄解析與測(cè)試友好性cua 是用 Python 3.9 寫的主要理由是不需要編譯、跨平臺(tái)行為一致而且標(biāo)準(zhǔn)庫就能完成大部分工作。依賴只有一個(gè) pyperclip 用來讀寫系統(tǒng)剪貼板列表渲染用的 rich 是可選項(xiàng)。核心代碼的第一步是確定存儲(chǔ)根目錄我讓它優(yōu)先讀取環(huán)境變量CUA_HOME沒有設(shè)置時(shí)才落到~/.cuaimport os from pathlib import Path def get_store() - Path: root Path(os.environ.get(CUA_HOME, Path.home() / .cua)) snippets root / snippets snippets.mkdir(parentsTrue, exist_okTrue) return snippets這里特別說一下為什么要做CUA_HOME這個(gè)環(huán)境變量。如果所有路徑都寫死成~/.cua測(cè)試時(shí)會(huì)污染真實(shí)數(shù)據(jù)而且每次跑測(cè)試都要想辦法清理有了環(huán)境變量測(cè)試?yán)镏灰阉赶蛞粋€(gè)臨時(shí)目錄再往臨時(shí)目錄里寫文件測(cè)試結(jié)束后自動(dòng)銷毀互不干擾。這也是一個(gè)可以復(fù)制到其他小工具里的通用設(shè)計(jì)凡是會(huì)在磁盤上留下數(shù)據(jù)的程序都應(yīng)該允許用戶通過環(huán)境變量或參數(shù)指定數(shù)據(jù)目錄。3.2 add 命令從管道和剪貼板兩種方式取數(shù)據(jù)cua add的目標(biāo)是讓“保存一個(gè)片段”的操作時(shí)間壓縮到三秒以內(nèi)。設(shè)計(jì)上它支持兩種數(shù)據(jù)來源如果終端有標(biāo)準(zhǔn)輸入正在往管道里傳內(nèi)容就讀取標(biāo)準(zhǔn)輸入否則就讀取系統(tǒng)剪貼板。具體邏輯是這樣的import sys def read_payload(): if not sys.stdin.isatty(): return sys.stdin.read() import pyperclip text pyperclip.paste() if not text.strip(): raise SystemExit(error: stdin is empty and clipboard is empty) return text這個(gè)邏輯解決了一個(gè)問題在用cat查看某個(gè)文件、或者在瀏覽器里復(fù)制了一串代碼之后我可以立刻切回終端執(zhí)行cua add docker-compose-postgres它會(huì)把剪貼板里的內(nèi)容變成一個(gè)新片段不用再打開編輯器粘貼保存。習(xí)慣之后保存一個(gè)片段的成本幾乎可以忽略不計(jì)。如果你在編寫類似的工具我建議一定要支持 stdin因?yàn)檫@種無意識(shí)的零成本保存才是你愿意長期堅(jiān)持使用的前提。對(duì)于已經(jīng)存在的同名片段默認(rèn)行為是直接覆蓋覆蓋前打印一行警告。這個(gè)設(shè)計(jì)一開始遭到我自己的懷疑生怕誤刪內(nèi)容但真實(shí)使用中發(fā)現(xiàn)同一名稱的片段往往就是同一類內(nèi)容的迭代版本覆蓋帶來的收益大于風(fēng)險(xiǎn)。如果你希望嚴(yán)格模式可以加一個(gè)全局參數(shù)--no-clobber遇到同名文件時(shí)直接報(bào)錯(cuò)退出。3.3 grab 的模糊匹配思路cua 的查找命令有兩個(gè)cua list用于瀏覽全部cua grab用于按關(guān)鍵詞快速找到片段。grab 是我用得最多、也是實(shí)現(xiàn)時(shí)最講究的命令。它的核心思路是把用戶的查詢?cè)~轉(zhuǎn)成一個(gè)“按順序匹配字符”的正則表達(dá)式比如輸入pgconn它需要能匹配到文件pg-conn-string.txt。實(shí)現(xiàn)里我做了一個(gè)叫 compile_fuzzy 的函數(shù)它會(huì)忽略掉短橫線和下劃線把用戶輸入的每個(gè)字符看作必須按順序出現(xiàn)的線索import re def compile_fuzzy(query: str) - re.Pattern: compact_query query.replace(-, ).replace(_, ).lower() parts [] for i, ch in enumerate(compact_query): if i 0: parts.append(r.*?) parts.append(re.escape(ch)) return re.compile(.join(parts), re.IGNORECASE)匹配時(shí)不但檢查原始文件名也檢查去掉短橫線之后的緊湊版本所以pgconn能命中pg-conn-string.txtsqlalchemy也能命中帶分類前綴的長文件名。如果你用過編輯器里的模糊查找就會(huì)覺得這個(gè)體驗(yàn)很自然不需要記全名不需要管分隔符只要記住幾個(gè)關(guān)鍵字母就夠了。很多人以為模糊匹配很難其實(shí)在片段文件名這種短文本上一個(gè)如此簡(jiǎn)單的正則就夠用了完全沒有必要引入復(fù)雜的編輯距離算法。3.4 copy 和 edit高頻操作要快找到片段之后最關(guān)鍵的動(dòng)作就是復(fù)制。cua copy key會(huì)先走與 grab 相同的匹配邏輯然后讀取文件內(nèi)容、剝離描述行、寫入系統(tǒng)剪貼板。這里的核心代碼非常短def cmd_copy(name: str): store get_store() matches search_files(store, name) if not matches: raise SystemExit(ferror: no snippet matched: {name}) snippet load_snippet(store, matches[0]) import pyperclip pyperclip.copy(snippet[body]) print(fcopied {matches[0].name} to clipboard)edit命令則負(fù)責(zé)打開編輯器修改片段內(nèi)容。它會(huì)優(yōu)先使用$EDITOR環(huán)境變量指定的編輯器默認(rèn)回退到viimport subprocess def cmd_edit(name: str): store get_store() matches search_files(store, name) if not matches: raise SystemExit(ferror: no snippet matched: {name}) editor os.environ.get(EDITOR, vi) subprocess.run([editor, str(matches[0])])這里有個(gè)細(xì)節(jié)編輯完成后我沒有做任何文件變更檢測(cè)因?yàn)榫庉嬈鞅4婧髢?nèi)容自然落在文件里后續(xù)再 grab 或 copy 時(shí)就會(huì)讀到新內(nèi)容。這種設(shè)計(jì)讓 edit 命令變得非常簡(jiǎn)單也符合 Unix 工具的哲學(xué)程序只負(fù)責(zé)找到文件并打開保存由編輯器負(fù)責(zé)。如果你要學(xué)習(xí)這個(gè)項(xiàng)目的代碼建議從這三條命令開始讀它們各自解決了存取鏈路的一個(gè)環(huán)節(jié)。3.5 一個(gè)最小測(cè)試矩陣為了確保這些命令在改動(dòng)后不會(huì)壞掉我給 cua 寫了一套極簡(jiǎn)的測(cè)試核心就是利用CUA_HOME臨時(shí)目錄。下面這段測(cè)試覆蓋了最常用的 add 和 grab 鏈路import importlib.util import io import os import sys import tempfile from pathlib import Path def test_add_and_grab(): with tempfile.TemporaryDirectory() as tmp: os.environ[CUA_HOME] tmp old_stdin sys.stdin sys.stdin io.StringIO(hello world) try: cua importlib.import_module(cua) cua.call([add, hello]) match cua.search_files(cua.get_store(), hello) assert len(list(match)) 1 body cua.load_snippet(cua.get_store(), list(match)[0])[body] assert body hello world finally: sys.stdin old_stdin測(cè)試并不復(fù)雜但它能保證最基本的添加、文件名規(guī)范化和搜索邏輯在重構(gòu)后仍然可用。對(duì)于個(gè)人項(xiàng)目來說這已經(jīng)足夠讓我安心地隨意修改代碼而不用擔(dān)心哪一次順手刪掉了某個(gè)功能。如果你嫌寫測(cè)試麻煩至少也要保證每個(gè)命令在干凈臨時(shí)目錄里能打出 help 信息。4. 真實(shí)使用中才會(huì)撞上的四個(gè)坑編碼、遠(yuǎn)程、空格與同步4.1 名稱里的空格終端世界的隱形炸彈第一個(gè)坑是在我用了大概一周之后踩中的。某次我想存一個(gè) docker 命令片段順手在終端里執(zhí)行了cua add docker compose up -d。結(jié)果它把“docker compose up -d”這一整串空格都保留成了文件名的一部分于是磁盤上出現(xiàn)了一個(gè)名字里帶四個(gè)空格的怪異文件。接下來所有跟它相關(guān)的操作都要打引號(hào)列表里顯示也對(duì)不齊最后我只能手動(dòng)去目錄里重命名。為了解決這個(gè)問題我在 add 命令里加入了強(qiáng)制規(guī)范化無論用戶輸入什么名字都會(huì)先轉(zhuǎn)為小寫然后把連續(xù)空格轉(zhuǎn)成短橫線再過濾掉除字母、數(shù)字、短橫線、點(diǎn)號(hào)之外的字符。所以上面那條命令實(shí)際上會(huì)存成docker-compose-up-d.txt而這個(gè)文件里存的內(nèi)容是“docker compose up -d”這條命令本身。規(guī)范化的規(guī)則也在 grab 返回結(jié)果時(shí)采用保證兩邊邏輯一致。這條經(jīng)驗(yàn)讓我明白在命令行工具里寧可替用戶做一點(diǎn)看似武斷的決策也不要讓用戶為隨后的引號(hào)問題買單。4.2 編碼問題Windows 和舊終端下的中文亂碼第二個(gè)坑是編碼。cua 最初在 macOS 上跑得很順但換到一臺(tái) Windows 機(jī)器上之后凡是包含中文的片段保存后再讀取全都變成了亂碼。原因很簡(jiǎn)單Python 在 Windows 上讀寫文本文件時(shí)默認(rèn)編碼可能是系統(tǒng)區(qū)域設(shè)置對(duì)應(yīng)的編碼而不是 UTF-8。中文系統(tǒng)下常見的是 GBK用 GBK 寫入、再被其他工具按 UTF-8 讀取自然就亂了。解決辦法是在所有文件讀寫操作里顯式指定編碼為 UTF-8并且在讀取時(shí)容忍無法解碼的字節(jié)def read_text(path: Path) - str: return path.read_text(encodingutf-8, errorsreplace) def write_text(path: Path, content: str) - None: path.write_text(content, encodingutf-8)errorsreplace的意思是遇到無法識(shí)別的字節(jié)時(shí)不要拋出異常而是替換成占位字符這樣至少保證不會(huì)因?yàn)橐粋€(gè)壞字節(jié)導(dǎo)致整個(gè)命令崩掉。另外在 Windows 終端里顯示中文時(shí)建議設(shè)置環(huán)境變量PYTHONIOENCODINGutf-8讓標(biāo)準(zhǔn)輸出也使用 UTF-8。這個(gè)坑對(duì)你的用戶來說可能沒有意義但只要你的工具要跨平臺(tái)分發(fā)就必須在一開始就統(tǒng)一編碼策略。4.3 遠(yuǎn)程終端里沒有剪貼板必須學(xué)會(huì)優(yōu)雅降級(jí)第三個(gè)坑是遠(yuǎn)程會(huì)話。我有相當(dāng)一部分時(shí)間是在連接服務(wù)器操作這時(shí)候如果執(zhí)行cua copypyperclip 通常會(huì)報(bào)錯(cuò)因?yàn)檫h(yuǎn)程 Linux 環(huán)境里沒有剪貼板協(xié)議也沒有安裝 xclip、xsel 之類的輔助工具。有些情況下即使做了 X11 轉(zhuǎn)發(fā)剪貼板也可能連不上總之遠(yuǎn)程和剪貼板之間經(jīng)常是徹底的失敗。我在實(shí)現(xiàn)里加了一個(gè)環(huán)境檢測(cè)當(dāng)檢測(cè)到當(dāng)前會(huì)話來自遠(yuǎn)程連接時(shí)copy命令自動(dòng)降級(jí)為直接打印內(nèi)容到終端并額外顯示一個(gè)提示告訴你這段應(yīng)該手動(dòng)選擇復(fù)制def cmd_copy(name: str): snippet find_and_load(name) if os.environ.get(SSH_CONNECTION): print(snippet[body]) print(# (remote session: clipboard unavailable, copy this manually)) return import pyperclip pyperclip.copy(snippet[body]) print(fcopied {name})用環(huán)境變量來做判斷算不上什么高深技巧但它很實(shí)用本地會(huì)話不會(huì)誤傷遠(yuǎn)程會(huì)話又能正常工作。如果你在 tmux、容器或遠(yuǎn)程開發(fā)環(huán)境里也用這個(gè)工具建議你也考慮類似的降級(jí)方案。工具本身的能力邊界不是死的在受限環(huán)境里能不能給出一個(gè)可用的替代方案往往決定了你是否愿意繼續(xù)使用它。4.4 多臺(tái)機(jī)器之間的同步文件化紅利與敏感內(nèi)容提醒第四個(gè)坑是多設(shè)備同步。因?yàn)?cua 的數(shù)據(jù)就是純文本文件我直接把它們交給一個(gè)私有 git 倉庫管理。在~/.cua目錄里初始化倉庫每次內(nèi)容變更后手動(dòng)提交一次。這樣我在辦公室電腦上新增的片段回到家里拉一下最近的變更就能看到遇到誤刪除還能從 git 歷史里恢復(fù)。如果你不想用 git用任何支持增量同步的私有工具數(shù)同步目錄也可以。但這里必須提醒一句cua 里保存的內(nèi)容很可能包含敏感信息比如內(nèi)網(wǎng)數(shù)據(jù)庫地址、帶訪問密鑰的配置、臨時(shí)生成的密碼。這些東西一旦被推到公共倉庫就是嚴(yán)重事故。我的做法是在~/.cua下放一個(gè).gitignore把secret-*這類特別命名的文件排除在外另外對(duì)少數(shù)真正敏感的片段用 gpg 單獨(dú)加密后再保存需要復(fù)制時(shí)先手動(dòng)解密。同步便利和安全永遠(yuǎn)是個(gè)權(quán)衡建議你先把“哪些片段可以同步”想清楚再?zèng)Q定是否開啟這項(xiàng)功能。5. 把 cua 變成肌肉記憶工作流整合與進(jìn)階玩法5.1 在編輯器里直接取片段cua 最舒服的上手方式是在編輯器里直接調(diào)用。比如在 vim 里我經(jīng)常用:r !cua grab db-url把某段配置直接讀進(jìn)當(dāng)前文件在 neovim 里還可以把這段調(diào)用再包一層快捷鍵。這樣我在寫代碼時(shí)不需要離開編輯器也不需要切到終端去復(fù)制粘貼已經(jīng)把 cua 當(dāng)成了輸入法之外的另一種“補(bǔ)全來源”。也許有人會(huì)問編輯器不是已經(jīng)有 snippets 插件了嗎確實(shí)有但那些插件通常綁定特定語言需要維護(hù)復(fù)雜的觸發(fā)詞配置。cua 的優(yōu)勢(shì)是完全通用只要內(nèi)容是我曾經(jīng)存過的東西不管它是 shell 命令、SQL 語句還是配置文件我都能用同一套記憶方式把它抓回來。它不是一個(gè)代碼補(bǔ)全插件而是一個(gè)樸素的文本倉庫正是這種樸素讓它能融入各種工具鏈。5.2 給 fuzzy finder 當(dāng)數(shù)據(jù)源如果你還嫌 cua 的命令行交互不夠直觀可以把它的列表輸出接給一個(gè) fuzzy finder 類的交互式選擇器比如 fzf。我常用的一行組合命令是這樣的cua list --with-description | fzf --preview cua grab {} --bind enter:become(cua copy {})這條命令會(huì)先展示所有片段名稱和描述預(yù)覽窗口里顯示選中片段的具體內(nèi)容按下回車就直接復(fù)制到剪貼板。原本需要先猜關(guān)鍵詞再跑 grab 的操作變成了上下移動(dòng)加回車整個(gè)過程基本不需要記憶任何片段名。這也讓我進(jìn)一步體會(huì)到命令行工具之間通過純文本協(xié)作是多么高效。cua 輸出的是人可讀的列表fuzzy finder 負(fù)責(zé)交互選擇兩者都沒有為此專門開發(fā)任何接口。5.3 我打算繼續(xù)加的三件小事用了一段時(shí)間之后我給自己列了一個(gè)很小的待辦清單都是能明確提升使用體驗(yàn)的改進(jìn)方向而不是功能堆疊。第一是模板變量。在片段里保留{{date}}、{{host}}這樣的占位符復(fù)制時(shí)用當(dāng)前日期或環(huán)境變量替換。這樣那些“帶日期的提交說明”“帶服務(wù)器名的部署命令”就不用每次手動(dòng)改一遍。第二是使用頻率統(tǒng)計(jì)。每次 copy 成功后在片段文件名旁邊加一個(gè)計(jì)數(shù)文件列表時(shí)按熱度排序這樣最常用的片段永遠(yuǎn)排在最前面。第三是 git 快照自動(dòng)提交。如果檢測(cè)到片段目錄已經(jīng)是一個(gè) git 倉庫就在每次增刪改之后自動(dòng)打一個(gè)提交免去手動(dòng)提交的負(fù)擔(dān)。這三件事我都刻意控制在很小的范圍內(nèi)。做 cua 這個(gè)工具最大的體會(huì)就是越是小工具越要克制把一條命令打磨到每天用上幾十次比做一個(gè)擁有一百個(gè)功能但沒人記得住的軟件有意義得多。如果你也想給自己做一把順手的小工具不要從完美設(shè)計(jì)開始從你每天最煩躁的那個(gè)操作開始。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
91偷拍欧美亚洲| 久久久9999| 日产狠狠干| 国产一区二区三区久久久精品| 国产精品久久久久久9999| 久久HD| 久久久96| 999久久久国产精品| 75大香蕉| 亚欧操逼片在线观看| 日本99一区二区| 天天干2019| 日韩啪啪啪啪啪| 大香蕉免费乱伦视频| 欧美中文字幕精品人妻| 熟女精品日韩一区二区三区| 久久久夜夜夜| 激情视频图片| 东北女人操比视频| 日韩国产九九精品一区二区三区毛片| 久久九精品| 天天操天天射青青草| 中文字幕一区二区三区视频播放| yellow网站免费观看日韩高清无码| 999精品久久久久久久| 智利AV在线网| 国产人妻精品一区二区三区秋霞| 日韩 成人 有码| 九九毛片这里只有精品| 在线女人91| 久久一二三四五六七八九区区区| 成年女人18级毛片毛片免费观看| 亚洲av影音先锋| 中文字幕奈奈美被公侵犯| 色色色日本| 欧美亚洲首页| 性色亚洲| 精品中文字幕第一页| 国产精品不卡一区二区三区av| 中文一区二区三区影院| 秋霞一级鲁丝片A片| 天天做天天爱| 国产传媒av天美传媒在线| 亚洲熟妇A V黑人| 国产自啪精品视频网站黑丝| 日本五区不卡| 亚洲男人在线观看天堂| 久久一区二区蜜桃| 九九九九九九视频免费| 国产高清免费不卡av| 亚洲精品性爱片| 亚洲最大AV网| 涩涩五月天| 日韩AV电影网站| 欧美色九九九| 97超碰碰| 国产91啪| www.99在线| 67914亚洲精品| 久久鲁夜| 日韩免费a级毛片无码a∨| 亚洲黄片免费在线播放| 在线强奷到舒服的无码视频 | 色综合久| 亚洲Av噜噜一区二区三区妖精| 精品妇操一区二区三区| 亚洲久9| 大二网站亚洲| 亚洲熟女av日韩熟女| 九九RE视频在线精品| 另类天堂| 日本99一区二区| 青青草国产一区二区三区| 欧美性色欧美| 久久久亚洲高清不打码| 日韩精品9999| 欧美熟妇色| 懂色中文一区二区三区| 玖玖视频在线资源一区二区三区| 精品女同一区二区三区| 欧美大波激情xxxx| 这里只有精品视频在线| 久操视频免费观看| 亚洲毛片基地专区| 日韩欧美亚洲一区二区三区影院| 亚州成人A√| 九九热最新| 98超碰日本| 久久熟女嫩草成人片免费| 午夜精品久久一区二区| 嗯嗯啊啊视频在线看| 亚洲人人夜夜澡人人爽| 99热思思| 亚洲欧美碰碰| 性色生活片久久毛片婬片免费放女人一级毛片| 超碰激情808| 91国产操逼视频| 久久久久久久国产| 欧美在线干| 自拍内地三级在线观看| 麻豆区久久久久亚| 人妻天天爽夜夜爽爽| A一区片| 亚洲天堂少妇| 亚州久久9| 五月婷婷AV| 日韩免费高清大片在线| 四虎影视欧美| 91精品国| 一本久道久久综合狠狠爱一密臀精| 久久国内| 色天使亚洲综合在线观看| 婷婷人妻激情| 91欧美巨乳| 爱爱动态120秒| 超97在线精品视频| 9国产超碰| 日日躁天天躁狠狠躁| 中文字幕亚洲欧美在线不卡| 操狠狠| 五十路三级片| 美国人人操人人操| 国语精品内射在线观看| 国产精品日韩在线一区| 视频国产欧美在线播放| 上特色A在线| 亚洲图片视频小说| 色欲久久99精品久久| 91碰碰| 性欧美精| 国产精品午夜精品| 大香蕉2017| 亚洲AV色图一区| 九九九九九九九九九九九九九九九女| 欧美色图天堂网m| 蜜臀人妻少妇久久在线观看| 久草新免费| 操逼操逼逼操操逼91| 超清中文乱码字幕| 麻花豆传媒剧国产MV出差| 久久久久久久久久久免费精品| 国产老太乱伦一区| 思思热在线视频免费| 92性色国产午夜福利在线661| 九九无码| 午夜欧美女人操逼| 999狠狠综合| 精彩国产视频播放1区2区| 中文字幕88av在线| 伊人欧美大香蕉视频| 97亚洲色图| yiqicaoav| 51久久夜色精品国产麻豆| 干日本人少妇午夜寂寞影院| 看一级黄色视频| 97人肏| 国产精品色哟哟| 黄站在线免费观看| 久久熟女嫩草成人片免费| 日韩欧美偷拍美女视频| 蜜臀99久久精品| 黄色AAAAA欧美| 国产怡红院| 9久久久久久| 留下AⅤ黄色片| 五月天丁香| 婷婷久月| 精品人妻一区二区三区不卡断 | 高清有码一区二区| 精品国产乱码久久久久久久久1| 国产欧美日本亚洲精品| 欧美精品久久久久久久丰满| 免费AV中文网在线观看| 夜色91| 亚洲极品| 国产精品久久久| 国产精品午夜AV完会免费| 婷婷五月天激情四射| 日本三级精品| 91精品少妇搡搡搡| 亚洲色丰满少妇高潮| 亚洲精品美女久久久久久久久| 人人操人人舒服| A一区片| 东京热天堂网| 天天日天天干天天色| 欧美一级二级三级| 三四中文字幕| 亚洲一区日韩精品| 中文自拍欧美影视| WWW4虎| 天天操女人| 久久国产精品一级二级三级| 97久久资源| 国产精品天美传媒| 青草影院内射高潮| 蜜臀99精品国产高清在线观看| 99精品九九九九九九| 91熟女丨91老女人| 女性91网站| 八戒无码国产午夜福利| 91狠狠色丁香婷婷综合久久| 色五月婷婷久久| 在线观看一卡二卡| 999熟女精品| 密臀在线视频| 一区二区高清视频| 天天做天天爽| 久久精品六区| 亚洲免费成人在线高清无码视频| 婷婷性爱| 懂色av中文字幕一区二区三区天美| 天天影视亚洲| 久久夜黄色无码A级大片| 亚洲综合婷婷| 狠久久| 国产精品久久久久久照片| 中文字幕 国产 精品| 偷拍欧美激情| 中文字幕无码不卡啪啪| 久操com| 99精品丰满人妻无| 久久久蜜桃臀无码视频| 裸体美女免费看网站青草| 欧美婷婷久久| 日韩性爱1级片视频| 天天干一区二区| 久久风骚城市| 伊人久久青青草| 一区二区三区一亚洲中文字幕、综合区灬 | 手机看av网站在线看| 99蜜桃臀久久久欧美精品网站| 亚洲最新Av| 精品人妻一区二区免费蜜桃| 超碰无码加勒比| 嗯嗯啊啊视频一区二区三区| 打av高清| 亚州男人天堂| 九九夜精品九九在线| 性暴力欧美猛交在线直播| 91五月天| 激情九月婷婷| 白丝av| 久久久穴999| 国产极品一区二区三区三州| 日韩一级二级三级在线不卡观看完整| 青青草玖玖爱| 日本精品免费一区二区三区四区| 9色在线| 日本999精品视频| 天天插天天射| 狠狠亚洲| 色五月第四色| 小草精彩毛片| 精品视频123区小说区| 人妻熟女午夜精品在线| 97在线视频观看网站| 久艹日日日| 精彩久久中文| av2014 日韩在线中文字幕| 91精品人妻一区二区三区蜜桃臀| 国产激情在线| 成人性爱电影一区二区| 色网在线视频观看免费| 日韩欧美成人午夜福利| 日本爽爽爽爽爽爽免费视频| 欧美碰碰综合色| 日日橹狠狠爱欧美超碰| 91国产大片| 欧美亚洲玖玖玖| 在线观看色视频| 在线观看中文字幕| 天天日天天干少妇日| 99热大香蕉伊在线| 热久久99999| 熟女人妻久久中文字幕一二区| 玖玖玖玖精品国产剧情| 欧美久久人人网| 亚洲图片色图欧美另类| 日韩亚洲中文有码视频| 干婷婷综合网| 丁香五月天堂网| 丰满人妻一区二区三区| 老色69| 国产四虎在线| 在线亚洲精品久久久| 99久久综合| 久久精品老司| 九九九九热| 噜噜瑟| 亚洲 在线| 亚洲春色一区二区三区| 久久久免费的精品| 日日日大屁股骚女人精品| 97操| 亚洲免费在线探花| 免费的很黄很污的全部视频| 亚洲高清欧美总合| 亚洲男人天堂2016| 成人日韩3| 男人网站婷婷| 亚洲暴力强奸AV| 亚洲男人的天堂网| 操逼视频亚洲| 夜夜欢天天干| 欧美熟妇乱码在线一区| 内射老妇BBWX0C0CK| 操九九九九九九| 天天插网| 一区中文字幕二区日韩| 最新亚洲人成网站在线影院| 人妻黑丝袜电影| 国产中文字幕曰本毛片| 中文三一区| 日本精品一区三区| 张柏芝国产一区在线观看| 超碰97欧美在线| 乱伦日本中文自拍| 在线小视频| 丁香五月自拍| 最新亚洲黄色免费电影| 色 亚洲 91| 在线性黄高清免费视频| 91人妻在线视频| 性色国产东北露脸精品视频| 国产CHASE男男GAYGA 毛多色婷婷| 九九热精品视频六| 9久精品视频在线观看| 国产综合永久精品日韩鬼片| 插入逼91| 99国产精品自在自在| 五月天色色网站| 校园春色综合网| 噜噜噜亚洲精品| 久久久人妻| 狠狠色伊人亚洲综合网站色 | 干妹子| 台湾佬激情综合| 亚州免费啪啪视频| 夜夜爽夜夜爽| 午夜福利 成人 91| 97爱亚洲综合色| 亚洲码专区| 东京热一区二区中文字幕| 麻豆精品三区视频| 狠狠躁AV| 欧美色五月| 超碰色男人操熟女| 国产精品成人午夜福利| 熟女网站最新| 久久欧洲| 亚洲欧美激情另类色图| 久色网| 国产强奸超碰AV| 欧美性爱18观看| 欧美午夜熟妇黑人精品91| 狠狠入| 天美一区在线| 青青草在线视频欧美| 丁香五月天堂网| 欧美强奸乱能| 免费人成在线观看网站品爱网| 神马久久午夜| 男人的天堂视频精品乱在线| 精彩久久中文| 国产精品电| AV在线资源| 五月天色图| 欧美亚洲国内自拍| 2025亚洲男人天堂| 毛片视频白嫩| 久久久久久中文字幕中文字幕最新| 免费一级视频特黄色大片| 天天艹天天日| 日韩精品人妻一| 极品欧美一区二区三区| 欧美组图日韩亚洲中文字幕| 久午视频| 欧美不在线| 加勒比综合88| av网站在线看| 无码 黑人一区二区三区| 亚洲麻豆av一区二区| 男人的天堂va| 无码高清操逼| 乱伦a片视频| 淫荡少妇免费| 偷看洗澡一二三区美女| 再深点灬舒服灬太大了好硬好爽| www网站黄| 丁香五月激情综合国产| 日本三级大片| 一二三四免费视频| 日韩午夜国产| 欧美91色| 综合第一页| 亚洲男人天堂网| 国内毛片热久久思思热| 亚洲自拍天堂| 免费看日本操逼视频| www色色com| 91一区二区| 欧美一区二区情色| 曰韩少妇无码| 加勒比海人人操超碰在线| 96麻豆精品一区二区三区| 亚洲阿v天堂在线| 国产又色又粗又黄又爽| 欧亚成人| 日韩AV电影网站| 91色综合激情| 四虎精品一区| 天天爽天天操啊啊啊| 视频国产成人精品日本亚洲18| 91亚洲色人| 精品一区二区人妖| 校园春色综合| 成人精品水蜜桃久久久久久久| 麻豆熟妇乱妇熟色A片在线看| 超碰九7| 国产高清MV操逼视频| 99热18| 国产嫩草精品A88AV在线| 亚洲 无码 有码 中文字幕| 午夜传煤十二区精品| 欧美大香蕉久| 大香蕉婷婷| 91丝袜激情在线| 深夜激情 | 中文字幕二区日韩天堂| 亚州色阁| 日韩欧美大片免费高清啪啪| 午夜久久无码1000合集| 天天日天天射天天干| 极品出轨视频网站| 干日本人少妇午夜寂寞影院| 麻豆国产av网| 另类欧美综合| 1024人妻熟女一区二区三区| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 欧美精品第四五页中文字幕在线观看| 欧美综色欧| 欧美日韩日产免费网站看| 五月婷婷深深爱| 亚热日本熟女| 成人无遮挡毛片免费看| 国产精品老熟女一区二区| 青操影院| 亚洲av无线观看| 久久精品一区| 男女一进一出视频久久| 91丨九色丨熟女高潮| 91色综合色| 另类小说综合网| 亚洲有码 欧美精品| 91热| www.狠狠| 天天综合~91| 狠狠 91| 亚洲黄色AV电影| 人妻aa| 这里只有精品久久| 欧日韩一二三f区| 日韩色| 久久久久亚洲精品| 操逼逼中文字幕| 91撸色网 玖玖网 欧美| 超碰精品日韩欧美国产| 不卡人妻少妇精品毛片一区23区视频| 玖草在线视频| 宅男91视频在线播放| 男人久久天堂| 欧美日韩人人精品| 91一区二区三区蜜桃| 99热99re超碰精品| 天天草天天日| 亚洲欧美日韩有码| 中文字幕日韩精品久久| 青女在线| 人人操人人大香蕉| 综合色欧美| 国产11页| 精品久久久久久AV无码| 天天舔天天日天天射| 久久黄色视频一区二区三区| 亚洲精品国产熟女久久久| 无码抄逼网| 亚洲97资源| 天天流夜夜操| 亚洲中文字幕在线视频一区二区| 欧美性生活内射| 国产强奸超碰AV| 欧美小说区视频区| 亚洲情色第一页| 精品久久久久久AV无码| 久久久久国产精品人妻aⅴ天堂| 亚洲国产午夜真人一级片中文字幕精品黄网站 | 亚洲丝袜二区| 久久伊人亚洲AV无码网站| 美日韩一二三区| 免费人成?大片在线播放| 91天天综合日韩欧美| 男人下部插入女人下部| 日韩精品1区2区中文字幕| 亚洲天堂少妇| 三级片大波波| 中文字幕亚韩| 婷婷色综合欧美日韩| 色综和网| 国产按摩一区二区三区| jk白丝没脱就开始啪啪| 亚洲狠| 日日干男人的天堂| 色播五月丁香| 先锋色眉乱伦资源| 国产老太乱伦一区| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 综合五月天| 99 国产丝袜在线| 天天透伊人| 欧美午夜视频精品久久| 日日干天天干夜夜爽| 国产AV线| 污污污8888| 亚洲激情网一二三四区| 夜夜影视四色| 欧美一二三级精品在线| 大香久久| 婷婷探花久久精品一区| 国产盗摄美女如厕大神作品在线观看| 午夜精品久久999热蜜桃介男人用| 日韩精品一区的| 天堂俺去俺来也www久久婷婷| 92久久| 蜜臀久久99精品久久久久电影| 嫩草伊人久久精品| 91女神在线视频| 色吧五月| 亚洲人妻av| 成人免费不卡在线视频| 熟女五十路一区二区三| 少妇厨房愉情理伦片bd在线观看| 97干97色| 国产白丝精品在线观看| 欧州91高潮| 日韩欧美传媒一区国产| 久久久啊啊啊| 啊啊啊啊嗯嗯在线久久久| 亚州九九九精品视频| 欧美伦乱爱| 国产精品网站免费| 亚洲日韩青青草色月| 久操高青| 亚洲精品国产AV天美传媒| 亚洲日韩AV视色| 人妻嗯啊啊在线播放| 婷婷色中文字幕| 午夜精品视频777| 亚洲啪啪性视频| av资源在线播放天堂| 一区二区三区视频在线观看免费| 国产九九九九九九九九| 高清国产av无码| 欧美日韩性爱视屏免费看了| 亚洲一区日韩| 超碰av人人人| 欧美有码亚洲中文字幕一区二区三区四区| 色一射色一射| 久久国模av| 色眯眯av| 极品少妇久久久| 青青在线视频日韩欧美| 黄色免费网| 日韩无码操逼片| 殴美在线AⅤ| 亚洲Av无码成人精品国产| 久久久国产成人一区二区三区在线| 欧美亚洲中文字幕| 91视频国品一二三区| 久久国产三区| 99黄页网站| 国产日韩中文字幕欧美| 亚洲熟女av中文字幕| 人妻一区二区三区四区视频| 免费亚洲黄色视频在线观看 | 伊人96在线| 美女久久久久久久久久久| 日本不卡一区二区| 久操网视频| 久久99精品视频| 久久25| 97超级色碰碰| 亚洲无码精品AV久久久| 欧美亚洲另类在线蜜桃| 色色激情| 久久国模av| 国产日本顶级一区二区三区| 男插女青青影院| 3p国产色噜噜一区| 成人精品视频一区二区| 干妹子| 三级日韩一区二区三区| 嫖老熟女A片一二三区| 天天干2019| 国产不卡的视频| 又大又大又大又粗爽高潮观看| 亚洲无吗在线视频| 97人肏| 超碰这里有精品| 亚洲 无码 偷拍| 九九性爱网| 伊人青青草久久| 丰满人妻-区二区三区免费看 | 亚洲1区2区三区高清中文字幕| 亚洲综合激情五月久久| 一区二区蜜臀| 婷婷婷婷婷婷久久久久| 新版天堂中文资源8在线| 少妇天堂网络| 热热色中文无码| 亚洲综合精品国产一区| 国产AV人人 夜夜人人澡| 久久久久久久久久久久色网| 97人人操人人摸人人爱| 久插综合| 肏逼视频日本| 中文字幕黑人大片| 欧日韩一二三f区| 欧美日韩香蕉| 午夜后入| 啪啪啪东京| 欧美亚洲影视| 水多多映视AV| 亚洲图片欧美日韩| 综合 亚洲 欧美| 久久草大香蕉| 啊啊在线| 久草大| 4tube欧美女厕所| 男人的天堂一区三区| 天天拍天| 黑人嘿嘿嘿超爽免费视频| 亚洲青色欧美| 亚洲日韩美国人妻| 97超碰总站| 国产探花精品在线| 熟妇国产免费一区| 国产精品激情久久久久久久| 欧美天堂亚洲电影院一区在线播放| 秋霞一级A片黄色视频| 91久久18禁| 亚洲国产欧美一区二区潘金莲| 久久97资源 网| 国产一区二区三区免费视频在性观看 | 久久视频少妇美女| 日韩精品1区2区中文字幕| 夜夜操中文字幕| 欧美东京热精品A∨| 亚洲情色综合网| 自拍鲍鱼一区在线高清观看免费| 国产suv精品一区| 啪啪啪大香蕉| 日韩在线观看三级电影| 亚洲一二三精品久久网| 啪啪啪东京| 一区二区亚州激情久婷婷欧美| 日本日皮视频逼| 精品一级| 亚洲日韩青青草色月| 亚洲91在线播放影院| 欧美最大综合网| 色色操| 玖玖爱在线视频免费观看| 欧美日韩婷婷中文| 无码国产精品午夜不卡(| 东京热男人天堂| 中美日韩毛片| 牛黄色久午久| 婷婷伊人五月| 乱色老一区二区三区的观看方式 | 欧美 日韩第一性色| 色婷婷五月天| 成人小说视频在线精品欧美| 欧美性Fer办公室秘书| 天天爽爽爽爽| 天天弄天天操| 91第一页| 91在线/欧洲| 亚洲宅男天堂| 亚洲无吗在线视频| 男人天堂网站| 91在线国产后入风骚翘臀美女素人| 日韩有码免费视频| 中文字幕aⅴ在线视频| 亚洲三级。日韩三级| 大香蕉99热| 天天爽天天爽| 97人人操人人摸人人爱| 91亚洲色图| 91美女高潮| 91美女视频在线| 亚洲色图大香| 欧美成人一区二区三区在线播放| 日韩成人无码| 人妻少妇精品久久久久久| 日本超碰97日韩精品人妻| 亚州国产精品乱| 日韩欧美俄罗斯A片| 国产精品久久久啊| 男人的天堂99| 后入福利| 91国产在线精品| 欧洲中文字幕| 69超碰综合| 国产在线视视频有精品| 午夜AV人气不卡| 夜草网站| 欧美97爱| 国产熟女无套内射| 亚洲校园激情| 亚洲美女黄色| 97一区二区三区视频| 国产精品乱人伊人网| 人人人人人人少妇| 色色五月天激情| 操B在线观看| 人人操人人摸人人看人人干| 成人无码在线视频网站| 91久久久亚洲| 丰满熟女一区二区三区在线播放| 久久久免费高清中文视频| 久久同城AV| 国产视频大全| 亚洲日韩东京热一区| 久久爽爽精品| 欧洲亚洲人妻无码中字久久三区四区| 日本精品人妻少妇一区二区| 日韩中字av一区| 欧亚乱色熟一区二区三四区| 好淫网一二三视区| 少妇国产不卡| 亚洲精品天天影视综合网| 久久发布国产伦子伦精品| 18一区二区三区| 久久e6只有精品| 国产有码一区| 成人热久久精品| 先锋音影AV| 久久宗合亚洲| 国内精品久9| 一区二区三区一亚洲中文字幕、综合区灬| 国产精品午夜福利| 狠日欧美| 最新无码国产| 久久久久亚洲av综合波多野制衣| 乱伦图av| 激情综合久久| 国产精品小视频一区二区三区| 久久9久9久99久9久9| 精品乱子一区二区三区99| av72网| 97中文字幕一区| 精品78| 韩三级a视频在线观看 | 青草影院内射高潮| 综合欧美色图| 国产乱伦搜索结果91P| 免费观看国产不卡av| 大伊香蕉在线视频免费| 99精彩视频| 国产a级精品| 日日骚精品视频| 91中出视频| a片 xxxx受爽视频| 亚洲暴力强奸AV| 能看的AV| 亚州综合AⅤ| 亚州,欧美在线| 凹凸视频在线一区二区| 免费啪啪一级视频| 青青欧美在线| 一区二区三区四区在线不卡| 久久久精品网站| 草草网站影院白丝内射| 啊…啊…操我用力操我| 91久久久老司机| 亚洲人妻久久| 粉嫩av在线一区二区| 久久久久久久一级黄色打同平台| AV99热18这里只有精品| 夜夜躁狠狠躁日日躁av| 黄色AAAAA欧美| 日韩AV一区二区三区四四| 无码久| 日韩在线国产字幕| 97色色视频| 亚洲成人帖图| 91成人精品在线播放| 欧美青青草视频| 免费伦费视频在线观看| 97超碰超欧美。| 国内偷自视频区视频综合| 欧美乱色| 久久久久精| 久久9精品网站| 操逼无码操逼| 长长久久曰曰夜夜成人网| 自拍亚洲综合| 国产福利电影| 欧美制服网站美腿丝袜| 国产尤物在线三区| 日日操丁香五月天| 你草精品在线视频| 3PAV乱伦视频| 久久久久免费少妇| 免费男人的天堂| AV不卡在线| 97在线欧洲| 绯色一区二区三区不卡少妇| 青青草日韩无码| 久肏视频字幕| 欧美熟女操屄| 国产一区二区久久| 手机在线免费看的av| 久99久视频精选| 欧美色图91| 婷婷色在线| 后入精品| 亚洲欧美成人在线| 欧美日韩不卡传媒| 人妻熟女av国产网站| 国产成人精品一区| 日韩无码黄色片| 中文字幕文字幕无码一区二区三区电影99| 肏逼视频日本| www老逼91| 国产传媒日韩欧美| 99re这里只有精品中心播放| 无码人妻一区二区三区四区老鸭窝| 欧美刺激色黄片免费看| 中文字幕精品亚洲熟女| 黑人黄片在线免费观看| 综合色久欲| 乱色视频中文字幕| 综合自拍| 婷婷五月天补不补| 97在线免费视频| 嫩草 人人网精品| 超碰免费人妻人人| 无码视频一区二区| 天天激情干| 91少妇通奸网站| 国内精品久久久久影院亚洲| 欧美在线电影| 欧美图片偷拍| 18禁在线视频| 加勒比伊人影院| 欧美性爱在线无码| 熟妇女伦乱视频| av在线浏览| 影视综合无码少妇| 欧美高清在线| 天天日天天舔| 欧美精品69性爱| 国产精品久久久999| 免费A V在线播放| 97国产精品一区| 欧美老妇综合网| 人妻一区视频| 東南亚性呦成人伦理资源在线视频| 婷婷五月天补不补| 99久久精品无码一区二区毛片免费 | 久久免费中文字幕在线观看| 老子午夜伦不卡影院| 东京热不卡视频| 99精品久久| 老熟女乱伦一区| 欧美色图小说综合| 亚州操操穴网| 欧美一区二区观看在线| 欧美激情精品| 天天干人妻| 综合熟女| 国产AV精久久| 97爱爱爱| 欧美,亚洲,日韩,v,天堂,手机在线观看 | 国产又色又爽又舒服的三级视频| 97日韩欧美| 久久久一区二区| 久久乐| 精品亚洲黄色片 国产精品导航一区二区| 国产区在线| 国产亚洲精品美女| 国产91美女高潮| 黄色AAAAAAAAAAA大片| 男人精品区| 9999九九九久久久| 久久天天性久久伊人| 青青伊人这里只有精品| 性综合网| 2017天天操天天日| AV在线资源| 日韩99神马视频播放片在线播放| 把腿张开老子CAO烂你| 国产自制av蜜乳| 97色香蕉| 欧美激情精品久久久| 免费人人搞97| 日韩人妻资源网| 国产 丝袜 欧美中文 另类| 久久久久久99AV无码免费网站| 后入精品| 国产精品久久久久久久久久二区三区| 亚州成人A√| 日韩一区二区精品视频| 亚洲欧美国产成人综合不卡| 亚洲精品乱码线路中文字幕| 亚洲无 码A片在线观看麻豆| 可乐操在线| 综合天天。| 东北女人操比视频| 神马午夜久久久| 亚洲乱色视频一区、二区在线| 三级三级三级日本99| 久久精品国产亚洲AV成人直播| 伊人久久综合影院| 欧美一区二区三区互相| 思思热一热婷婷热一热| 97精品久久| 人人妻人人爱人人玩| 国产熟女一区二区| 2020天天色综合| 精品人妻视频一区二区在线播放 | 1769国内精品视频| 在线人成亚洲视频免费观看| 伊人影院日本| 中文乱码字字幕在线第5页| 99热这里只有精品18| 久久久久白虎| 另类欧美色| 久夜视频| 色婷婷国产精品一区在线观看| 成人怡红院| 一区二区中文| 国产毛片毛片4p懂色| 84YTCOM性无码| 明星性猛交ⅹxxx乱大交| 国产婷婷综合在线观看| 成人无遮挡毛片免费看| 涩涩这里只有精品视频| 欧美色视频在线| 五月天丁香婷婷综合网站| 免费黄色A片| 色综合久| 欧美少妇大量自拍视频在线观看| 色嘟嘟人妻天堂网| 熟妇熟女一区二三区| 中文字幕97色| 超碰视97中文| 大粗鳼巴久久久久| 蜜臀在线视频| 狠狠操官网| 日韩一区二区三区四区五区| 欧美一区二区亚洲天堂| 大香蕉啪啪啪| 99999精品成人| 老熟妇一区二区三区啪啪| 毛片99-全集电影手机免费观看完整-B029AV| 亚州,欧美在线| 精品国产乱码久久久久久网站入口| 九九九久久久| 久久黄色性爱视频| 动漫爆乳3D奶水一区在线观看| 日本大片日本一区二区免费高清| 99热这里只有精| 超碰97在线色男人??| 99re黄| 91精品亚洲内射孕妇| 成人无码影片视频在线| 久久国产三区| 亚拍在线| 综合久久9| 日本东京热加勒比久久| 五月天社区| 中文在线久久字幕| 性生活性生大爱77AV国产| 亚洲无码偷拍| 色青青久久影视| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 欧美中文综合| 久久亚洲AV无码专区国产精品| 久久精品一区二区三区不卡| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 中文熟女五十乱码在线| 韩国一级做a久久久久| 少妇高潮对白在线观看| 国产精品一区二区在钱播放| 欧美综合传媒| 国产精品第一区第一页| 欧美婷婷| 加勒比性爱成人在线| yaouchengrenav| 久久婷五月天| 91欧美综合在线| 亚洲国产精品V?在线播放| 激情综合色| 亚州九九九精品视频| 免费视频在线一区二区不卡| 色九九九九久| 大香蕉日韩欧美| 欧美一级特黄淫片在线观看| 午夜呻吟欧美| 欧美翘臀视频网站一区二区三区| 八人操人人摸人人看| 欧美爆操91| 久久人妻| 蜜臀av在线播放一区二区三区| 超碰综合97在线| AAAAAAAAA黄片| 国产AV人人 夜夜人人澡| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 舔人妻中文免费视频| 性久久| 久久久久亚洲一区女同性恋中文字幕| 91精品91久久久久77777俄罗斯老妇姓x| 无色无码| Julia Annxxxxx| 中国一级操逼视频| 国产农村妇女精品一二区| 狠狠爱综合网| 日韩pv中文| 亚洲男人天堂av| 成人情色一区二区| 怡红院成人视频| 丁香五月电影| 不卡视频一区蜜桃视频| 99啪啪视频| 日日躁天天躁狠狠躁| 亚洲国产一区二区三区四区国产| 97精品97久久| 国语国产操逼伊人AV网| 久久久精品一区二区| 国产精品999zyz| 日韩国产九九精品一区二区三区毛片| 国产欧美精选激情视频| 亚洲 另类 丝袜 自拍 动漫| 免费一级a毛片久久久久久鸭绿欲 国产精品亚洲天堂网址 | 超碰69| 操逼逼无码| 欧美日韩人妻精品系列一区二区三区| 日韩av乱伦| 久久精品超碰| 亚州色交| 日韩免费中文字幕视频| 亚洲色性情三级| 日韩熟女乱伦中出| 2026国产精品视频| 中文字幕av亚洲在线| 91日韩网站| 国产女人高潮视频| 亚洲欧洲av影音| 亚洲揄拍网| 国产懂色精品国产av| 美女性91| 91在线免费观看处女| 99re免费视频精品全部| 日韩不卡网操逼中文字幕日韩| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 国产99999| 欧州激情视频在线一区二区| 日日操丁香五月天| 麻豆一区二区AV天美| 欧美日韩99精品麻豆传媒| 欧美呦呦性爱| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 吉田爱美AV在线| 人摸人人操人| 久操免费观看| 91久久18禁| 国产免费永久精品无码| 亚洲av成人精品一区| 国产精品天干天干综合网麻豆| 人妻少妇av在线观看| 加勒比综合网| 天美传媒av一区二区| 成人片在线播放| 不卡中文字幕aⅴ在线| 久久久久久无码人妻中文字幕| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 超碰人人超在线观看| 天天日天天操天天射河南省| 天天操天天看| 东北女人av| 日本护士高潮| 99亚洲国产精品色一区二区三区| 九一国产精品| 美腿色图| 91一起操| 中文字幕交换人妻| 日韩无限资源| 熟妇激情| 亚洲码和欧洲精品激情系列| 亚洲国产午夜真人一级片中文字幕精品黄网站 | 欧色综合| 拍拍拍拍大尺度黄色三级片拍拍拍拍拍照| 婷婷久久五月天| 人人操人人干网页| 免费操逼91| 91蜜桃传媒精品久久久一区二区| 天天弄欧美| 国产这里只有精品| 亚洲一卡2卡3卡4卡乱码网站| 视频国产欧美在线播放| 婷婷性网| 色哟哟av网址| 久久色一区二区| 亚洲国产精品乱码在线观看| 性爱av网站| 午夜120视频在线观看| A级国产欧美激情在线| 色综合天天爱去电影网| 中文在线视频| 青青伊人久久| 美女淫穴| 国产专区路线| 亚洲色图久久成人| 狠狠久久亚洲欧美专区| 丁香五月激情综合国产| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 91成人无码| 国内一级精品| 一本色道久久综合亚洲二区三区| 九九国产热| 亚州综合图片| 欧美色天堂网在线视频| 九一综合精品视品av| 日本人体九九九九九九| 丁香五月天堂网| 婷婷五月天激情四射| 中文字幕在线高清男人的天堂| 围产精品一区二区三区视频播放| 中字幕人妻一区二区三区| 日韩免费在线观看不卡| 天天躁日日躁狠狠躁| 啊啊啊啊啊在线| 麻豆天美一区二区| 啊啊啊操死我| 97香蕉网| 99久久亚洲精品无码毛片潘甜甜| 天天综合网日韩| 久久狠狠色噜噜狠狠狠狠97| 欧美色图91| 蜜臀在线视频| 国产午夜精品理论片a大结局| 国产成人欧美精品在线| 精品免费视频国产一区| 无码不卡八戒| 97在线精品观看视频| 久久久久久久国产视频| 国内毛片国产专区二|