標籤:

如何格式化代碼能夠將類成員/函數的名字對齊?

這是代碼片段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 不同平台下的一致。

需要安裝

  1. python 3
  2. VS Code
  3. 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++向上轉型,為什麼不需要強制轉換?

TAG:編程 | C | CC |