如何格式化代碼能夠將類成員/函數的名字對齊?
這是代碼片段A,紅框內的變數沒有對齊
這是代碼片段B,紅框內的變數已對齊用AStyle可以把A格式化成B的風格么?或者Visual Studio上還有其他工具能這樣格式化代碼么?
VS插件code alignment可以實現這個功能,不過我很少用這個。
你這種格式化對版本管理很不友好,把 blame 命令給廢掉了。
從不用代碼格式化工具,不能忍受一個破程序修改我的代碼(╯" - ")╯︵ ┻━┻
Vim 用 Tabular 毫無壓力
b很煩人。當後來人需要用一個比當前最長的更長的類名聲明一個變數時,之前的聲明是不是都要改?你一改麻煩不說就又會把blame廢掉一次。
這些對齊總是讓人很糾結。版面清爽確實讓人很舒服,對齊的代碼也會讓閱讀變得輕鬆。唯一的問題是版本管理的時候大量無關的diff 會讓人很鬱悶。所以,還是等版本管理把這個問題解決了在對齊吧。
話說寫Python 的猿們你們就不用 diff 嗎?我的代碼都這樣,不過都是人肉tab對齊的。
不是很建議這樣對齊啊,對代碼的改動量不小,項目的其他人員也不一定能接受如果要使用通用的對齊方式(gnu、google、linux各種style)可以用google-astyle:
http://astyle.sourceforge.net/astyle.html
基本上可以滿足大多數自動代碼格式化的需求。每次要改代碼發現一個格式問題,就去把格式修改一下。
然後版本管理的時候就多了一處干擾。
後來寫了個腳本。每次提交代碼前跑一次就好了,保證了代碼在 macOS 和 Windows 不同平台下的一致。
需要安裝
- python 3
- VS Code
- VS Code 的 cpp 插件,就是這個提供了格式化功能
格式化的樣式在這裡,https://clang.llvm.org/docs/ClangFormatStyleOptions.html
函數名字對齊這樣的都可以通過參數調。
使用前需要你自己去給 source_path 變數設置你的代碼文件目錄
https://gist.github.com/ccseer/12d77dc635d5c65a72bf23b36361d4c3#file-code_format-py
# coding=utf-8
import os
import platform
# File Extension filter. You can add new extension
CPP_EXTENSIONS = (".cxx", ".cpp", ".c", ".hxx", ".hh", ".h", ".cc", ".hpp")
# https://clang.llvm.org/docs/ClangFormatStyleOptions.html
LLVM_ARGS = (" -style="{"
"BasedOnStyle: google, "
"BreakBeforeTernaryOperators: true, "
"BinPackParameters: false, "
"AllowShortFunctionsOnASingleLine: Empty, "
"SpaceBeforeParens: ControlStatements, "
"SortIncludes: true, "
"Language: Cpp, "
"KeepEmptyLinesAtTheStartOfBlocks: false, "
"AllowShortLoopsOnASingleLine: false, "
"AllowShortIfStatementsOnASingleLine: false, "
"AllowShortBlocksOnASingleLine : false, "
"AccessModifierOffset: -4, "
"AlignConsecutiveAssignments: true,"
"BreakBeforeBinaryOperators: All, "
"ColumnLimit: 80, "
"AlignAfterOpenBracket: Align, "
"Standard: Cpp11, "
"IndentWidth: 4, "
"BreakBeforeBraces: Stroustrup"
"}" -i ")
exclusive_path = []
source_path = []
formatter_path = ""
if platform.system() == "Windows":
formatter_path = "%PATH%/.vscode/extensions/ms-vscode.cpptools-0.12.0/LLVM/bin/clang-format.exe"
else:
formatter_path = r"~/.vscode/extensions/ms-vscode.cpptools-0.12.0/LLVM/bin/clang-format.darwin"
def run(paths):
for folder in paths:
if folder in exclusive_path:
print("pass", folder)
continue
for lists in os.listdir(folder):
path = os.path.join(folder, lists)
if os.path.isdir(path):
run([path])
else:
if path.endswith(CPP_EXTENSIONS):
cmd = formatter_path + LLVM_ARGS + path
os.system(cmd)
print(path)
run(source_path)
print("over")
exit(0)
哈哈哈,對陳碩老大的回答深有體會,自從實習的時候,被拉去對項目的模塊做代碼規範調整,後面我就是這十幾萬行代碼,50% 以上bug 和神奇feature 的owner了,已經不做這個模塊1年多了,現在還是每隔幾個月就有一個新同學來問我,這個xxx是你寫的么?我有個問題。。。 然後我就會很無辜的告訴他們,我也不知道這是幹啥的,我當初只是調整了幾個空格和tab。。
vim有個eazyalign很好用,可以試試
在vs版本比較舊的情況下,編輯器不會將TAB轉換為對應數目的空格。人肉添加空格對齊。。。
你這是病,要治
強迫症+1一直純手工 SPACE or TAB。。
推薦閱讀:
※請問這個程序為什麼會死在18,19行?
※應該如何熟悉GNU工具鏈?例如GCC/Makefile/GDB
※C++ 編程軟體有哪些推薦?有沒有比 vc 6 更好的?
※怎樣用C++實現生產者消費者的模擬?
※C++向上轉型,為什麼不需要強制轉換?